Weka机器学习实战之性能度量

性能度量(performance measure)反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果;这意味着模型的“好坏”是相对的,什么样的模型是好的,不仅仅取决于算法和数据,还决定于任务需求。

这里就不具体展开啦,因为我也才刚开始学习,所以就从查准率查全率F1来说吧。错误率和精度虽常用,但是并不能满足所有的任务需求。

查准率、查全率

从《机器学习》一书中引用的西瓜例子来说,假定瓜农拉来一车西瓜,我们用训练好的模型对这些西瓜进行判别和预测,显然,我们使用错误率衡量的只是有多少比例的西瓜被判定错误。但是如果我们关心是“挑出的西瓜有多少比例是好瓜”,或者“所有的好瓜中有多少比例被挑选了出来”,这个时候错误率就不够用了,需要使用其它的性能度量来衡量了。

再比如在信息检索中,我们经常会关心“检索出来的信息中有多少条是用户感兴趣的”,“用户感兴趣的信息中有多少被挑选了出来”。查准率(precision)查全率(recall)更适合用于此类需求的性能度量。

对于二分类问题,可以将样本根据器真实类别与学习器预测的类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)以及假反例(false negative)四种情形。令TP、FP、TN、FN分别表示其对应的样例数,则显然有TP+FP+TN+FN=样例总数。分类结果的“混淆矩阵”如下:

那么我们可能得出查准率P查全率R的定义分别为:

查全率查准率是一对矛盾的度量。一般来说,查准率高时,查全率往往偏低,查全率偏高是,查准率往往偏低。

什么是F1呢?

我们从前一节知道查全率查准率是一对相互矛盾的度量。因此,衡量一个学习器的时候,我们没法非常客观地描述它的性能好坏,它可能分类很准确,但是可能不全面。因此这里引入一个新的度量—-F1。

说白了写成这个

其实$F_1$就是基于查准率查全率的一个调和平均数。这里引申一下,$F_\beta$是加权调和平均数

其中$\beta>0$度量了查全率查准率的相对重要性。

其实,在一些应用中,对查准率和查全率的重视程度有所不同,例如在用户商品推荐系统中,我们为了尽可能的打扰用户,更希望推荐内容确实用户感兴趣的,这个时候查准率更重要;而在逃犯信息检索系统中,更希望尽可能减少漏掉逃犯的情况,因此查全率更重要。而$F_1$的一般形式$F_\beta$,更能让我们表达出对查全率和查准率的不同偏好,它的定义为:

如果$\beta=1$时退化为标准的$F_1$;$\beta>1$时查全率有更大的影响;$\beta<1$时查准率有更大的影响。

Weka性能评估

以上一节决策树代码为例,我们使用如下代码进行Weka中J48决策树模型性能评价:

1
2
3
4
5
6
7
8
9
10
11
12
13
Instances instances = loadDataSet(TRAINING_DATASET_FILENAME);
Classifier j48 = generateClassifier();
// 使用同一个数据集进行交叉验证
Evaluation evaluation = new Evaluation(instances);
evaluation.crossValidateModel(j48, instances, 10, new Random(1));

/** 打印算法的汇总信息 */
System.out.println("** Decision Tress Evaluation with Datasets **");
System.out.println(evaluation.toSummaryString());
System.out.print(" the expression for the input data as per algorithm is ");
System.out.println(j48);
System.out.println(evaluation.toMatrixString());
System.out.println(evaluation.toClassDetailsString());

输出的结果如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
** Decision Tress Evaluation with Datasets **

Correctly Classified Instances 661 94.5637 %
Incorrectly Classified Instances 38 5.4363 %
Kappa statistic 0.8799
Mean absolute error 0.0691
Root mean squared error 0.2228
Relative absolute error 15.2992 %
Root relative squared error 46.8739 %
Total Number of Instances 699

the expression for the input data as per algorithm is J48 pruned tree
------------------

uniformity_of_cell_size <= 2
| bare_nuclei <= 3: 2 (405.39/2.0)
| bare_nuclei > 3
| | clump_thickness <= 3: 2 (11.55)
| | clump_thickness > 3
| | | bland_chromatin <= 2
| | | | marginal_adhesion <= 3: 4 (2.0)
| | | | marginal_adhesion > 3: 2 (2.0)
| | | bland_chromatin > 2: 4 (8.06/0.06)
uniformity_of_cell_size > 2
| uniformity_of_cell_shape <= 2
| | clump_thickness <= 5: 2 (19.0/1.0)
| | clump_thickness > 5: 4 (4.0)
| uniformity_of_cell_shape > 2
| | uniformity_of_cell_size <= 4
| | | bare_nuclei <= 2
| | | | marginal_adhesion <= 3: 2 (11.41/1.21)
| | | | marginal_adhesion > 3: 4 (3.0)
| | | bare_nuclei > 2
| | | | clump_thickness <= 6
| | | | | uniformity_of_cell_size <= 3: 4 (13.0/2.0)
| | | | | uniformity_of_cell_size > 3
| | | | | | marginal_adhesion <= 5: 2 (5.79/1.0)
| | | | | | marginal_adhesion > 5: 4 (5.0)
| | | | clump_thickness > 6: 4 (31.79/1.0)
| | uniformity_of_cell_size > 4: 4 (177.0/5.0)

Number of Leaves : 14

Size of the tree : 27

=== Confusion Matrix ===

a b <-- classified as
438 20 | a = 2
18 223 | b = 4

=== Detailed Accuracy By Class ===

TP Rate FP Rate Precision Recall F-Measure MCC ROC Area PRC Area Class
0.956 0.075 0.961 0.956 0.958 0.880 0.955 0.955 2
0.925 0.044 0.918 0.925 0.921 0.880 0.955 0.903 4
Weighted Avg. 0.946 0.064 0.946 0.946 0.946 0.880 0.955 0.937

总结

从上面的例子可以看到它的F1值达到了0.946,对于这个模型的结果而言,是一个非常不错的效果了。关于后面的MCCROC Area以及PRC Area等等评价指标后面再进行学习和介绍。

参考文献:周志华《机器学习》

分享到