2.3 性能度量

习题2.5 在某个西瓜分类任务的验证集(validation set)中,共有10个样例.其中有3个示例的类别标记为“1”,表示该示例是好瓜;有7个示例的类别标记为“0”,表示该示例不是好瓜.由于学习方法能力有限,只能产生在验证集上精度(accuracy)为0.8的分类器.

1.如果想要在验证集上得到最佳查准率(precision),该分类器应该做出何种预测?此时的查全率(recall)和F1分别是多少?

2.如果想要在验证集上得到最佳查全率,该分类器应该做出何种预测?此时的查准率和F1分别是多少?

精度等指标的计算方式见教材2.3节.

解答

由精度可知,在验证集上,TP+TN=8,FP+FN=2.

1.要最大化查准率,则此时该分类器应该正确地预测1个好瓜.此时TP=1,FP=0,FN=2,TN=7.混淆矩阵(confusion matrix)见表2.1:

表2.1 最大化查准率时的分类结果混淆矩阵

基于以上结果,有

2.要最大化查全率,则此时该分类器应该预测出5个好瓜.此时TP=3,FP=2,FN=0,TN=5.混淆矩阵见表2.2:

表2.2 最大化查全率时的分类结果混淆矩阵

基于以上结果,有

习题2.6 教材2.3节展示了如何计算学习模型的二分类性能度量,下面以多分类为例,探究如何对多分类模型的预测结果进行评估.

学习器(learner)L在某个多分类任务数据集上的预测混淆矩阵见表2.3,请回答下列问题:

表2.3 学习器L在某个多分类任务数据集上的预测混淆矩阵

1.该学习器的预测精度是多少?

2.该学习器的预测查准率、查全率分别是多少?请分别计算微查准率(micro-P)、宏查准率(macro-P)、微查全率(micro-R)和宏查全率(macro-R),它们的值一样大吗?

3.该学习器的预测F1度量是多少?请分别计算微F1(micro-F1)、宏F1(macro-F1),它们的值一样大吗?

解答

1.精度是衡量该学习器在所有样例中正确预测的比例.在实际计算中,正确预测的样例是混淆矩阵中对角线上的元素,因此精度等于对角线上的元素和除以矩阵中的总元素和.

2.查准率和查全率的计算需要将多分类混淆矩阵改写为二分类混淆矩阵.分别以第0类、第1类、第2类作为正类,以其他类作为负类,可以得到如表2.4所示的3个二分类混淆矩阵:

表2.4 不同类作为正类时的混淆矩阵

依照教材中的式(2.12)、式(2.13)、式(2.15)、式(2.16),可以计算以下指标:

3.依照教材中的公式,可以计算以下指标:

式(2.34)和式(2.35)分别对应教材中的式(2.14)和式(2.17).

习题注释 本题的目的是帮助理解如何计算多分类的性能度量.scikit-learn等工具包已经集成了已有的多种不同分类指标,由于采取了不同的计算方式,macro-P和micro-P,macro-R和micro-R,macro-F1和micro-F1的值一般不同.本书中的习题12.8讨论了多分类不平衡数据对不同F1指标计算方式的影响.

习题2.7 假设某数据集包含8个样例,其对应的标记和学习器的输出值(从大到小排列)见表2.5.该任务是一个二分类任务,标记1或0表示真实标记为正例或负例.学习器的输出值代表学习器对该样例是正例的置信度(认为该样例是正例的概率).

表2.5 样例表

1.计算P-R曲线中每一个端点的坐标并绘图.

2.计算ROC曲线中每一个端点的坐标并绘图,计算AUC(Area Under the ROC Curve,ROC曲线下的面积).

解答

基于学习器的输出值(样例预测为正例的概率),可通过划定阈值(threshold)的方法将样例预测为正例或负例,假设输出值大于阈值的预测为正例,反之为负例.例如,若阈值为0.5,则表2.5中{x1x2x3x4}对应的学习器输出值均大于0.5,因此预测x1x4为正例,剩下的为负例.对比预测的标记和真实标记,可计算查准率、查全率等指标,从而绘制P-R曲线或ROC曲线.虽然阈值可在[0,1]区间连续取值,但考虑到样例有限,只需要在8个样例构成的9个区间取阈值即可,针对每一个阈值,比较模型的预测结果和标记,从而确定P-R曲线和ROC曲线中各点的坐标.

首先考虑设置阈值在(0.81,1]内,则所有样例均被预测为负例,预测标记与真实标记的对比如表2.6所示.由于没有预测出正例,查准率P=0,而所有正例均被预测为负例,因此查全率R=0,得到P-R曲线中的一个坐标(0,0).类似地,可计算出真正例率TPR=0,假正例率FPR=0,得到ROC曲线中的一个坐标(0,0).

表2.6 阈值位于(0.81,1]时样例预测标记与真实标记的对比

其次考虑设置阈值在(0.74,0.81]内,则x1被预测为正例,其余样例均被预测为负例,预测标记与真实标记的对比见表2.7,而对应的类别混淆矩阵见表2.8.可计算出查准率,查全率R=TP/(TP+FN)=0.25,得到P-R曲线中的一个坐标(1,0.25).还可计算出真正例率,假正例率FP R=FP/(TN+,得到ROC曲线中的一个坐标(0.25,0).

表2.7 阈值位于(0.74,0.81]时样例预测标记与真实标记的对比

表2.8 阈值位于(0.74,0.81]时的分类结果混淆矩阵

依此类推,可以得到其他阈值下P-R曲线和ROC曲线中各点的坐标.

1.针对P-R曲线,其横、纵坐标见表2.9(如图2.4a所示).

表2.9 P-R曲线坐标

左侧括号内计算了样本对中有多少负例被排在正例之前,若正负例预测值相同则记为0.5个.

2.针对ROC曲线,其横、纵坐标见表2.10(如图2.4b所示).AUC为

AUC=0.25×0.5+0.25×0.75+0.25×1+0.25×1=0.8125.(2.36)

表2.10 ROC曲线坐标

另外,根据教材中式(2.21)和式(2.22),以及表2.5中的数据,有D+={x1x2x4x6},D-={x3x5x7x8}.于是有

可以看到,通过这两种方式计算的结果相同.

图2.4 P-R曲线与ROC曲线

绘制P-R曲线时,若阈值为0,所有样本均预测为正例,这时P=m+/m,其中m+为正例样本数,m为样本总数,m+/m是正例占所有样本的比例,而R=1,此时右侧端点为(R=1,P=m+/m);若阈值为1,所有样本均预测为负例,这时P=0/0未定义,R=0,为避免这一情况,可将阈值设置为略低于最大置信度的取值,从而使置信度最大的样本被预测为唯一的正例.在此情况下,若该样本真实标记为正,则P=1/1=1,R=1/m+是一个极小值,若m+较大,则最左边的点坐标为(R≈0,P=1),从视觉上来看,P-R曲线从(0,1)开始,到(1,m+/m)结束;但若置信度最大的样本真实标记为负,此时P=0,R=0,曲线将从(0,0)开始,到(1,m+/m)结束.这一现象也将在习题2.9中进一步验证.

习题注释 本题考查P-R曲线和ROC曲线的理解.两类曲线的绘制方法类似,但需注意其中“点”的含义不同.此外,需注意P-R曲线中的极值点.P-R曲线的左端点的值与置信度最大的样本是正例还是负例有关,如果是正例,那么是从(0,1)开始,否则从(0,0)开始;右端点为(1,m+/m),其中m+为正例样本数,m为样本总数,m+/m为正例占所有样本的比例.

习题2.8 教材2.3节介绍了AUC性能度量指标.对于有限样例,请证明

证明 考虑ROC曲线的绘制过程,设前一个样例在ROC曲线上的坐标为(xy),

1)若当前样例为真正例,则其在ROC曲线上的对应坐标为

2)若当前样例为假正例,则其在ROC曲线上的对应坐标为.

由此可知,对于任何一对正例和负例,

1)若其中正例预测值小于负例,则x值先增加,y值后增加,曲线下方的面积(即AUC)将不会因此而增加.

2)若其中正例预测值大于负例,则y值先增加,x值后增加,曲线下方的面积(即AUC)将增加一个矩形格子的大小,其面积为

3)若其中正例预测值等于负例,则对应标记点xy坐标值同时增加,曲线下方的面积(即AUC)将增加一个三角形的大小,其面积为

考虑所有正例和负例对,AUC的面积即为曲线下方的面积,根据上述情况进行累加,则有

习题注释 本题考查对AUC的理解.AUC的计算有两种方式:一种方式是绘制ROC曲线,计算曲线下的面积;另一种方式是直接比较在模型预测的排序中有多少比例的正例被排在了负例的前面.习题2.7中的AUC结果已验证了这两种计算方式所得的结果一致.

习题2.9 现有500个测试样例,其对应的真实标记和学习器的输出值见表2.11(完整数据见data.csv文件).该任务是一个二分类任务,标记1表示正例,标记0表示负例.学习器的输出值越接近1表明学习器认为该样例越可能是正例(为正例的置信度越高),输出值越接近0表明学习器认为该样例越可能是负例.

表2.11 测试样例表

1.请编程绘制P-R曲线.

2.请编程绘制ROC曲线,并计算AUC.

需要注意数据中存在输出值相同的样例.

解答

P-R曲线和ROC曲线的绘制方法见习题2.7.当样例较多时,由于阈值很接近时坐标差异较小,也可以在整个[0,1]区间内均匀取值,计算将每一个临界值作为阈值时的对应坐标值.

1.P-R曲线的绘制.首先对模型预测结果按照输出值进行排序,保证排序后从前到后样例为正例的可能性逐渐降低.然后,选择(0,0.999)间的1000个数作为判为正例的临界阈值,分别计算这些值下的查全率和查准率.最后,根据这1000组数据绘制出P-R曲线,其中,给定阈值x时计算P-R曲线的程序如下:

2.ROC曲线的绘制与P-R图类似.首先对模型预测结果按照输出值进行排序,保证排序后从前到后样例为正例的可能性逐渐降低.然后,选择(0,0.999)间的1000个数作为判为正例的临界阈值,分别计算这些值下的真正例率和假正例率.最后,根据这1000组数据绘制出ROC曲线.ROC实现代码如下:

27行使用函数pr_curve可绘制P-R曲线.

所绘制的P-R曲线和ROC曲线如图2.5所示.

图2.5 P-R曲线和ROC曲线

在绘制P-R曲线和ROC曲线的过程中,需要注意横、纵坐标的值,并给出对应的轴名称.

依照式(2.38)计算得到的AUC值约为0.8737.AUC公式计算的实现代码如下:

dataset.values是模型对500个样本置信度的列表(list).基于式(2.39),AUC的计算查看所有正负样本对的组合,因此使用value1和value2对该列表进行两层循环的遍历.