针对二元分类问题,在完成机器学习建模后,需要对模型的效果做评价。
直观上,我们先来统计一下有没有把正样本预测为负,或者把负样本预测为正。
我们定义:
True Positive(真正,TP):将正类预测为正类数
True Negative(真负,TN):将负类预测为负类数
False Positive(假正,FP):将负类预测为正类数误报 (Type I error)
False Negative(假负,FN):将正类预测为负类数→漏报 (Type II error)
这样我们通过统计TP、TN、FP、FN的样本个数,就可以得到一系列指标数据。
拿预测恶性肿瘤来举例,我们希望知道使用现有的机器学习模型,针对100个患者:
有几个恶性肿瘤患者我们告诉他是良性?
FN个(漏报)
有几个良性肿瘤患者我们告诉他是恶性?
FP个(误报)
我们预测正确了几个恶性肿瘤患者?
TP
实际上一共多少个恶性肿瘤患者?
TP+FN个(恶性预测正确+漏报)
实际上全部恶性肿瘤患者中,我们预测正确占比?(精确率 precision)
TP /(TP + FN)
我们预测了几个恶性肿瘤患者?
TP+FP个
在我们预测的恶性肿瘤患者中,我们预测正确占比?(召回率 recall)
TP /(TP + FP)
在所有患者之中,不管良性还是恶性,我们预测正确占比?(准确率 accuracy)
(TP + TN) / ( TP + TN + FP + FN)
在所有患者之中,不管良性还是恶性,我们预测错误占比?(错误率 Error rate)
(FP + FN) / ( TP + TN + FP + FN) = 1 - accuracy
关于精准率和召回率:
Precision从预测结果角度出发,描述了二分类器预测出来的正例结果中有多少是真实正例,即该二分类器预测的正例有多少是准确的;Recall从真实结果角度出发,描述了测试集中的真实正例有多少被二分类器挑选了出来,即真实的正例有多少被该二分类器召回。
Precision和Recall通常是一对矛盾的性能度量指标。一般来说,Precision越高时,Recall往往越低。原因是,如果我们希望提高Precision,即二分类器预测的正例尽可能是真实正例,那么就要提高二分类器预测正例的门槛,例如,之前预测正例只要是概率大于等于0.5的样例我们就标注为正例,那么现在要提高到概率大于等于0.7我们才标注为正例,这样才能保证二分类器挑选出来的正例更有可能是真实正例;而这个目标恰恰与提高Recall相反,如果我们希望提高Recall,即二分类器尽可能地将真实正例挑选出来,那么势必要降低二分类器预测正例的门槛,例如之前预测正例只要概率大于等于0.5的样例我们就标注为真实正例,那么现在要降低到大于等于0.3我们就将其标注为正例,这样才能保证二分类器挑选出尽可能多的真实正例。
那么有没有一种指标表征了二分类器在Precision和Recall两方面的综合性能呢?答案是肯定的。如前面所说,按照二分类器预测正例的门槛的不同,我们可以得到多组precision和recall。在很多情况下,我们可以对二分类器的预测结果进行排序,排在前面的是二分类器认为的最可能是正例的样本,排在最后的是二分类器认为的最不可能是正例的样本。按此顺序逐个逐步降低二分类器预测正例的门槛,则每次可以计算得到当前的Precision和Recall。以Recall作为横轴,Precision作为纵轴可以得到Precision-Recall曲线图,简称为P-R图:
P-R图可直观地显示出二分类器的Precision和Recall,在进行比较时,若一个二分类器的P-R曲线被另一个二分类器的P-R曲线完全包住,则可断言后者的性能优于前者,例如上图二分类器A的性能优于C;不看图形的话如何使用数值来表示精准率和召回率的综合指标呢,引入F-Measure,又称为F-Score。
F-Measure是Precision和Recall加权调和平均:
当参数α=1时,就是最常见的F1,也即