什么是评估指标?
评估指标是针对模型性能优劣的一个定量指标。一种评价指标只能反映模型一部分性能,如果选择的评价指标不合理,那么可能会得出错误的结论,故而应该针对具体的数据、模型选取不同的的评价指标。
针对不同类型的学习任务,我们有不同的评估指标,这里我们来介绍最常见的分类算法的一些评估指标。常用的分类任务评价指标有准确率(Accuracy)、精确率(Precision)、召回率(Recall)、F1 Score、P-R曲线(Precision-Recall Curve)、ROC、AUC等。
基本概念-混淆矩阵
混淆矩阵(confusion matrix)是一个评估分类问题常用的工具,对于 k 元分类,其实它就是一个k x k的表格,用来记录分类器的预测结果。对于常见的二分类,它的混淆矩阵是 2x2 的。
在二分类中,可以将样本根据其真实结果和模型的预测结果的组合划分为真阳性(true positive,TP)、真阴性(true negative,TN)、假阳性(false positive,FP)、假阴性(false negative,FN)。根据 TP、TN、FP、FN 即可得到二分类的混淆矩阵,如下图所示。
- TP:True Positives, 表示 真实值为正例 且被 分类器判定为正例(预测值) 的样本数
- FP:False Positives, 表示 真实值为负例 且被 分类器判定为正例(预测值) 的样本数
- FN:False Negatives, 表示 真实值为正例 但被 分类器判定为负例(预测值) 的样本数
- TN:True Negatives, 表示真实值为负例且被 分类器判定为负例(预测值) 的样本数
注意:
第一个字母表示真实值与预测值划分正确与否, T 表示判定正确(True), F 表示判定错误 (False)。
第二个字母表示分类器判定结果(预测结果), P 表示判定为正例, N 表示判定为负例。
分类算法的评估指标
准确率(Accuracy)
准确率是指分类正确的样本占总样本个数的比例。准确率是针对所有样本的统计量。它被定义为:
Accuracy=TP+TNTP+FP+TN+FN=正确预测的样本数所有的样本数Accuracy=\frac{TP+TN}{TP+FP+TN+FN}=\frac{正确预测的样本数}{所有的样本数}Accuracy=TP+FP+TN+FNTP+TN=所有的样本数正确预测的样本数
准确率能够清晰的判断我们模型的表现,但有一个严重的缺陷: 在正负样本不均衡的情况下,占比大的类别往往会成为影响 Accuracy 的最主要因素,此时的 Accuracy 并不能很好的反映模型的整体情况。
例如,一个测试集有正样本99个,负样本1个。模型把所有的样本都预测为正样本,那么模型的Accuracy为99%,看评价指标,模型的效果很好,但实际上模型没有任何预测能力。
精确率(Precision)
精确率又称为查准率,是针对预测结果而言的一个评价指标。指在分类正确的正样本个数占分类器判定为正样本的样本个数的比例。精确率是对部分样本的统计量,侧重对分类器判定为正类的数据的统计。它被定义为:
Precision=TPTP+FP=分类正确的正样本个数被分类器判定为正样本的样本个数Precision=\frac{TP}{TP+FP}=\frac{分类正确的正样本个数}{被分类器判定为正样本的样本个数}Precision=TP+FPTP=被分类器判定为正样本的样本个数分类正确的正样本个数
多标签:
Precision=∑l=1LTPl∑l=1L(TPl+FPl)=Label预测为l且分类正确的正样本个数被分类器判定为Label为l的样本个数Precision=\frac{\sum_{l=1}^LTP_l}{\sum_{l=1}^L(TP_l+FP_l)}=\frac{Label预测为l且分类正确的正样本个数}{被分类器判定为Label为l的样本个数}Precision=∑l=1L(TPl+FPl)∑l=1LTPl=被分类器判定为Label为l的样本个数Label预测为l且分类正确的正样本个数
召回率(Recall)
召回率是指分类正确的正样本个数占真正的正样本个数的比例。召回率也是对部分样本的统计量,侧重对真实的正类样本的统计。它被定义为:
Recall=TPTP+FN=分类正确的正样本个数真正的正样本个数Recall=\frac{TP}{TP+FN}=\frac{分类正确的正样本个数}{真正的正样本个数}Recall=TP+FNTP=真正的正样本个数分类正确的正样本个数
多标签:
Recall=∑l=1LTPl∑l=1L(TPl+FNl)=Label预测为l且分类正确的正样本个数真正的Label为l样本个数Recall=\frac{\sum_{l=1}^LTP_l}{\sum_{l=1}^L(TP_l+FN_l)}=\frac{Label预测为l且分类正确的正样本个数}{真正的Label为l样本个数}Recall=∑l=1L(TPl+FNl)∑l=1LTPl=真正的Label为l样本个数Label预测为l且分类正确的正样本个数
Precision 与 Recall 的权衡
精确率高,意味着分类器要尽量在 “更有把握” 的情况下才将样本预测为正样本, 这意味着精确率能够很好的体现模型对于负样本的区分能力,精确率越高,则模型对负样本区分能力越强。
召回率高,意味着分类器尽可能将有可能为正样本的样本预测为正样本,这意味着召回率能够很好的体现模型对于正样本的区分能力,召回率越高,则模型对正样本的区分能力越强。
从上面的分析可以看出,精确率与召回率是此消彼长的关系, 如果分类器只把可能性大的样本预测为正样本,那么会漏掉很多可能性相对不大但依旧满足的正样本,从而导致召回率降低。
那么当不同模型的Recall和Precision各有优势时该如何选择模型?此时可以通过F1 Score来比较。
F1分数(F1 Score)
F1 Score是精准率和召回率的调和平均值,它同时兼顾了分类模型的准确率和召回率,是统计学中用来衡量二分类(或多任务二分类)模型精确度的一种指标。它的最大值是1,最小值是0,值越大意味着模型越好。 它定义为:
F1=2⋅Precision⋅RecallPrecision+RecallF1=2 \cdot \frac{ Precision \cdot Recall}{Precision+Recall}F1=2⋅Precision+RecallPrecision⋅Recall
F-Beta Score
更一般的FβF_\betaFβ,它的物理意义就是将准确率和召回率这两个分值合并为一个分值,在合并的过程中,召回率的权重是准确率的β倍。我们定义FβF_\betaFβ分数为:
Fβ=(1+β2)⋅precisiont⋅recall(β2⋅precision)+recallF_\beta = (1 + \beta^2) \cdot \frac{precisiont \cdot recall}{(\beta^2 \cdot precision) + recall}Fβ=(1+β2)⋅(β2⋅precision)+recallprecisiont⋅recall
β\betaβ 本质上是Recall与Precision 权重比, 当 β=2\beta = 2β=2 时, F2F_2F2表明 Recall 的权重要比Precision高,其影响更大; 当 β=0.5\beta = 0.5β=0.5 时, F0.5F_0.5F0.5 表明 Recall 的权重要比Precision低, 对应的影响更小;
宏平均F1分数(Macro F1)
宏平均 F1 算法在计算 Precision 与 Recall 时,是先分别计算每个类别的Precision 与 Recall, 然后再进行平均。
Precisioni=TPiTPi+FPiPrecision_i=\frac{TP_i}{TP_i+FP_i}Precisioni=TPi+FPiTPi
Precisionmacro=∑i=1LPrecisioni∣L∣Precision_{macro}=\frac{\sum_{i=1}^L Precision_i}{|L|}Precisionmacro=∣L∣∑i=1LPrecisioni
Recalli=TPiTPi+FNiRecall_i=\frac{TP_i}{TP_i+FN_i}Recalli=TPi+FNiTPi
Recallmacro=∑i=1LRecalli∣L∣Recall_{macro}=\frac{\sum_{i=1}^L Recall_i}{|L|}Recallmacro=∣L∣∑i=1LRecalli
宏平均F1分数公式为:
F1macro=2⋅Precisionmacro⋅RecallmacroPrecisionmacro+RecallmacroF1_{macro}=2 \cdot \frac{ Precision_{macro} \cdot Recall_{macro}}{Precision_{macro}+Recall_{macro}}F1macro=2⋅Precisionmacro+RecallmacroPrecisionmacro⋅Recallmacro
注:Macro F1 本质上是所有类别的统计指标的算术平均值来求得的,这样单纯的平均忽略了样本之间分布可能存在极大不平衡的情况。
微平均F1分数(Micro F1)
微平均 F1 算法在计算 Precision 与 Recall 时会将所有类直接放到一起来计算。
Precisionmicro=∑i=1LTPi∑i=1LTPi+∑i=1LFPiPrecision_{micro}=\frac{ \sum_{i=1}^L TP_i}{\sum_{i=1}^L TP_i + \sum_{i=1}^L FP_i}Precisionmicro=∑i=1LTPi+∑i=1LFPi∑i=1LTPi
Recallmicro=∑i=1LTP∑i=1LTP+∑i=1LFNRecall_{micro}=\frac{ \sum_{i=1}^L TP}{ \sum_{i=1}^L TP + \sum_{i=1}^L FN}Recallmicro=∑i=1LTP+∑i=1LFN∑i=1LTP
微平均F1分数公式为:
F1micro=2⋅Precisionmicro⋅RecallmicroPrecisionmicro+RecallmicroF1_{micro}=2 \cdot \frac{ Precision_{micro} \cdot Recall_{micro}}{Precision_{micro}+Recall_{micro}}F1micro=2⋅Precisionmicro+RecallmicroPrecisionmicro⋅Recallmicro
Macro 与 Micro 的区别
Macro 相对 Micro 而言,小类别起到的作用更大。例如,对于一个四分类问题有:
- class A: 1 TP, 1 FP
- class B: 10 TP , 90 FP
- class C: 1 TP, 1 FP
- class D: 1 TP, 1 FP
那么对于 Precision 的计算如下:
PA=PC=PD=PE=0.5,PB=0.1P_A=P_C=P_D=P_E=0.5,P_B=0.1PA=PC=PD=PE=0.5,PB=0.1
Pmicro=0.5+0.1+0.5+0.54=0.4P_{micro}=\frac{0.5+0.1+0.5+0.5}{4}=0.4Pmicro=40.5+0.1+0.5+0.5=0.4
Pmicro=1+10+1+12+100+2+2=0.123P_{micro}=\frac{1+10+1+1}{2+100+2+2}=0.123Pmicro=2+100+2+21+10+1+1=0.123
我们看到,对于 Macro 来说, 小类别相当程度上拉高了 Precision 的值,而实际上, 并没有那么多样本被正确分类,考虑到实际的环境中,真实样本分布和训练样本分布相同的情况下,这种指标明显是有问题的, 小类别起到的作用太大,以至于大样本的分类情况不佳。 而对于 Micro 来说,其考虑到了这种样本不均衡的问题, 因此在这种情况下相对较佳。
总结如下:
- 如果你的类别比较均衡,则随便使用Micro或者Macro;
- 如果你认为大样本的类别应该占据更重要的位置, 使用Micro;
- 如果你认为小样本也应该占据重要的位置,则使用 Macro;
- 如果 Micro << Macro , 则意味着在大样本类别中出现了严重的分类错误;
- 如果 Macro << Micro , 则意味着小样本类别中出现了严重的分类错误。
加权F1分数(Weighted F1)
为了解决 Macro 无法衡量样本均衡问题,一个很好的方法是求加权的 Macro, 因此 Weighted F1 出现了。
加权F1算法是Macro算法的改良版,是为了解决Macro中没有考虑样本不均衡的原因,在计算 Precision 与 Recall 时候,各个类别的 Precision 与 Recall要乘以该类在总样本中的占比来求和。
Precisioni=TPiTPi+FPiPrecision_i=\frac{TP_i}{TP_i+FP_i}Precisioni=TPi+FPiTPi
Precisionweighted=∑i=1L(Precisioni×wi)∣L∣Precision_{weighted}=\frac{\sum_{i=1}^L (Precision_i \times w_i)}{|L|}Precisionweighted=∣L∣∑i=1L(Precisioni×wi)
Recalli=TPiTPi+FNiRecall_i=\frac{TP_i}{TP_i+FN_i}Recalli=TPi+FNiTPi
Recallweighted=∑i=1L(Recalli×wi)∣L∣Recall_{weighted}=\frac{\sum_{i=1}^L (Recall_i \times w_i)}{|L|}Recallweighted=∣L∣∑i=1L(Recalli×wi)
加权F1分数公式为:
F1weighted=2⋅Precisionweighted⋅RecallweightedPrecisionweighted+RecallweightedF1_{weighted}=2 \cdot \frac{ Precision_{weighted} \cdot Recall_{weighted}}{Precision_{weighted}+Recall_{weighted}}F1weighted=2⋅Precisionweighted+RecallweightedPrecisionweighted⋅Recallweighted
马修斯相关系数(Matthews correlation coefficient)-MCC
MCC 主要用于衡量二分类问题,其综合考虑了 TP, TN, FP, FN, 是一个比较均衡的指标, 对于样本不均衡情况下也可以使用。
MCC的取值范围在 [-1, 1] , 取值为1 表示预测与实际完全一致, 取值为0表示预测的结果还不如随机预测的结果, -1 表示预测结果与实际的结果完全不一致。
因此我们看到, MCC 本质上描述了预测结果与实际结果之间的相关系数。
马修斯相关系数公式为:
MCC=TP×TN−FP×FN(TP+FP)×(TP+FN)×(TN+FP)×(TN+FN)MCC = \frac{TP \times TN - FP \times FN}{\sqrt{(TP + FP) \times (TP + FN) \times (TN + FP) \times (TN +FN)}}MCC=(TP+FP)×(TP+FN)×(TN+FP)×(TN+FN)TP×TN−FP×FN
MCC=预测正确的样本−预测错误的样本预测为正样本数×真正正样本数×真正负样本数×预测为负样本数MCC = \frac{ 预测正确的样本 - 预测错误的样本 }{\sqrt{预测为正样本数\times 真正正样本数 \times 真正负样本数 \times 预测为负样本数}}MCC=预测为正样本数×真正正样本数×真正负样本数×预测为负样本数预测正确的样本−预测错误的样本