机器学习中分类模型的常用评价指标
评价指标是针对模型性能优劣的一个定量指标。
一种评价指标只能反映模型一部分性能,如果选择的评价指标不合理,那么可能会得出错误的结论,故而应该针对具体的数据、模型选取不同的的评价指标。
本文将详细介绍机器学习分类任务的常用评价指标:混淆矩阵(Confuse Matrix)、准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 Score、P-R曲线(Precision-Recall Curve)、ROC、AUC
二分类
准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 Score
混淆矩阵(Confuse Matrix)
针对一个二分类问题,即将实例分成正类(positive)或负类(negative),在实际分类中会出现以下四种情况:
(1)若一个实例是正类,并且被预测为正类,即为真正类TP(True Positive )
(2)若一个实例是正类,但是被预测为负类,即为假负类FN(False Negative )
(3)若一个实例是负类,但是被预测为正类,即为假正类FP(False Positive )
(4)若一个实例是负类,并且被预测为负类,即为真负类TN(True Negative )
将上面说的几种情况列出来,就是一个混淆矩阵:
当然混淆矩阵也可以推广到多分类:
通过混淆矩阵可以大致看出预测正确的数量和预测错误的数量。
准确率(Accuracy)
预测正确的样本数量占总量的百分比,具体的公式如下:
A c c u r a c y = T P + T N T P + F N + F P + T N Accuracy=\frac{TP+TN}{TP+FN+FP+TN} Accuracy=TP+FN+FP+TNTP+TN
准确率有一个缺点,就是数据的样本不均衡,这个指标是不能评价模型的性能优劣的。假如一个测试集有正样本99个,负样本1个。模型把所有的样本都预测为正样本,那么模型的Accuracy为99%,看评价指标,模型的效果很好,但实际上模型没有任何预测能力。
精准率(Precision)
又称为查准率,是针对预测结果而言的一个评价指标。在模型预测为正样本的结果中,真正是正样本所占的百分比,具体公式如下:
P r e c i s i o n = T P T P + F P Precision=\frac{TP}{TP+FP} Precision=TP+FPTP
召回率(Recall)
又称为查全率,是针对原始样本而言的一个评价指标。在实际为正样本中,被预测为正样本所占的百分比。具体公式如下:
R e c a l l = T P T P + F N Recall=\frac{TP}{TP+FN} Recall=TP+FNTP
在不同的应用场景下,我们的关注点不同,例如,在预测股票的时候,我们更关心精准率,即我们预测升的那些股票里,真的升了有多少,因为那些我们预测升的股票都是我们投钱的。而在预测病患的场景下,我们更关注召回率,即真的患病的那些人里我们预测错了情况应该越少越好。
F1 Score
精确率和召回率是一对此消彼长的度量。例如在推荐系统中,我们想让推送的内容尽可能用户全都感兴趣,那只能推送我们把握高的内容,这样就漏掉了一些用户感兴趣的内容,召回率就低了;如果想让用户感兴趣的内容都被推送,那只有将所有内容都推送上,宁可错杀一千,不可放过一个,这样准确率就很低了。
所以在实际工程中,我们往往需要结合两个指标的结果,去寻找一个平衡点,使综合性能最大化。这时就会用到F1 Score
1 F 1 = 1 2 ⋅ ( 1 P + 1 R ) \frac{1}{F 1}=\frac{1}{2} \cdot\left(\frac{1}{P}+\frac{1}{R}\right) F11=21⋅(P1+R1)
F 1 = 2 × P × R P + R = 2 × T P 样例总数 + T P − T N F1=\frac{2 \times P \times R}{P+R} = \frac{2 \times TP}{样例总数+TP-TN} F1=P+R2×P×R=样例总数+TP−TN2×TP
其中P和R即代表精准率(Precision)和召回率(Recall)
P-R曲线
P-R曲线(Precision Recall Curve)是描述精确率/召回率变化的曲线。绘制P-R曲线时将预测结果按照预测为正类概率值排序,然后将概率阈值由1开始逐渐降低,按此顺序逐个把样本作为正例进行预测,每次可以计算出当前的P,R值;.以P为纵坐标,R为横坐标绘制点,将所有点连成曲线即可得到P-R曲线,如下图所示:
如果一个机器的P-R曲线被另一个机器的P-R曲线完全包住,则后者的性能优于前者,例如上面的黑色曲线和黄色曲线所代表的机器优于蓝色曲线代表的机器。
PR曲线发生了交叉时:以PR曲线下的面积作为衡量指标,但这个指标通常难以计算,所以一般采用 “平衡点”(Break-Even Point),即查准率=查全率时的取值来判断,值越大代表效果越优。
ROC曲线和AUC
在正式介绍ROC之前,我们还要再介绍两个指标,这两个指标的选择使得ROC可以无视样本的不平衡。这两个指标分别是:灵敏度(sensitivity)和特异度(specificity),也叫做真正率(TPR)和 真负率(TNR),具体公式如下。
-
真正率(True Positive Rate , TPR),又称灵敏度:
T P R = 正样本预测正确数 正样本总数 = T P T P + F N TPR = \frac{正样本预测正确数}{正样本总数} = \frac{TP}{TP+FN} TPR=正样本总数正样本预测正确数=TP+FNTP
其实我们可以发现灵敏度和召回率是一模一样的,只是名字换了而已 -
假负率(False Negative Rate , FNR) :
F N R = 正样本预测错误数 正样本总数 = F N T P + F N FNR = \frac{正样本预测错误数}{正样本总数} = \frac{FN}{TP+FN} FNR=正样本总数正样本预测错误数=TP+FNFN -
假正率(False Positive Rate , FPR) :
F P R = 负样本预测错误数 负样本总数 = F P T N + F P FPR = \frac{负样本预测错误数}{负样本总数} = \frac{FP}{TN+FP} FPR=负样本总数负样本预测错误数=TN+FPFP -
真负率(True Negative Rate , TNR),又称特异度:
T N R = 负样本预测正确数 负样本总数 = T N T N + F P TNR = \frac{负样本预测正确数}{负样本总数} = \frac{TN}{TN+FP} TNR=负样本总数负样本预测正确数=TN+FPTN
其中假负率FNR=1−TPR、假正率FPR=1−TNR
ROC
ROC(Receiver Operating Characteristic)曲线,又称接受者操作特征曲线。曲线对应的纵坐标是TPR,横坐标是FPR。如下就是一个ROC曲线:
与前面的P-R曲线类似,ROC曲线也是通过遍历所有阈值来绘制整条曲线的。如果我们不断的遍历所有阈值,预测的正样本和负样本是在不断变化的,相应的在ROC曲线图中也会沿着曲线滑动。
那么如何判断一个模型的ROC曲线是好的呢?这个还是要回归到我们的目的:FPR表示模型对于负样本误判的程度,而TPR表示模型对正样本召回的程度。我们所希望的当然是:负样本误判的越少越好,正样本召回的越多越好。所以总结一下就是TPR越高,同时FPR越低(即ROC曲线越陡),那么模型的性能就越好。参考如下动态图进行理解。
AUC
AUC(Area Under Curve)是处于ROC曲线下方的那部分面积的大小。AUC越大,代表模型的性能越好。
ROC和AUC对整体样本是否均衡并不敏感。举个例子:假设总样本中,90%是正样本,10%是负样本。在这种情况下我们如果使用准确率进行评价是不科学的,但是用TPR和TNR却是可以的,因为TPR只关注90%正样本中有多少是被预测正确的,而与那10%负样本毫无关系,同理,FPR只关注10%负样本中有多少是被预测错误的,也与那90%正样本毫无关系。这样就避免了样本不平衡的问题。
多分类问题
对于多分类问题,可以将其分为多个二分类问题,得到多组混淆矩阵。估算全局性能的方法有两种,分为宏平均(macro-average)和微平均(micro-average)。简单理解,宏平均就是先算出每个混淆矩阵的P值和R值,然后取得平均P值 m a c r o − P macro-P macro−P和平均R值 m a c r o − R macro-R macro−R,再算出F1值等。而微平均则是计算出混淆矩阵的平均TP、FP、TN、FN,接着进行计算P、R,进而求出F1等数据。其它分类指标同理,均可以通过宏平均/微平均计算得出。
macro P = 1 n ∑ i = 1 n P i \operatorname{macro}P=\frac{1}{n} \sum_{i=1}^{n} P_{i} macroP=n1i=1∑nPi
macro R = 1 n ∑ i = 1 n R i \operatorname{macro}R=\frac{1}{n} \sum_{i=1}^{n} R_{i} macroR=n1i=1∑nRi
macro F 1 = 2 × macro P × macro R macro P + macro R \operatorname{macro} F 1=\frac{2 \times \operatorname{macro} P \times \operatorname{macro} R}{\operatorname{macro} P+\operatorname{macro}R} macroF1=macroP+macroR2×macroP×macroR
micro P = T P ‾ T P ‾ + F P ‾ \operatorname{micro} P=\frac{\overline{T P}}{\overline{T P}+\overline{F P}} microP=TP+FPTP
micro R = T P ‾ T P ‾ + F N ‾ \operatorname{micro}R=\frac{\overline{T P}}{\overline{T P}+\overline{F N}} microR=TP+FNTP
micro F 1 = 2 × micro P × micro R micro P + micro R \operatorname{micro} F 1=\frac{2 \times \operatorname{micro} P \times \operatorname{micro} R}{\operatorname{micro} P+\operatorname{micro}R} microF1=microP+microR2×microP×microR
需要注意的是,在多分类任务场景中,如果非要用一个综合考量的metric的话,宏平均会比微平均更好一些,因为宏平均受稀有类别影响更大。宏平均平等对待每一个类别,所以它的值主要受到稀有类别的影响,而微平均平等考虑数据集中的每一个样本,所以它的值受到常见类别的影响比较大。
参考文章:
https://www.cnblogs.com/guoyaohua/p/classification-metrics.html