什么是评估指标?
评估指标是针对模型性能优劣的一个定量指标。一种评价指标只能反映模型一部分性能,如果选择的评价指标不合理,那么可能会得出错误的结论,故而应该针对具体的数据、模型选取不同的的评价指标。
针对不同类型的学习任务,我们有不同的评估指标,这里我们来介绍最常见的分类算法的一些评估指标。常用的分类任务评价指标有准确率(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)
准确率是指分类正确的样本占总样本个数的比例。准确率是针对所有样本的统计量。它被定义为:
A c c u r a c y = T P + T N T P + F P + T N + F N = 正 确 预 测 的 样 本 数 所 有 的 样 本 数 Accuracy=\frac{TP+TN}{TP+FP+TN+FN}=\frac{正确预测的样本数}{所有的样本数} Accuracy=TP+FP+TN+FNTP+TN=所有的样本数正确预测的样本数
准确率能够清晰的判断我们模型的表现,但有一个严重的缺陷: 在正负样本不均衡的情况下,占比大的类别往往会成为影响 Accuracy 的最主要因素,此时的 Accuracy 并不能很好的反映模型的整体情况。
例如,一个测试集有正样本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}=\frac{分类正确的正样本个数}{被分类器判定为正样本的样本个数} Precision=TP+FPTP=被分类器判定为正样本的样本个数分类正确的正样本个数
多标签:
P r e c i s i o n = ∑ l = 1 L T P l ∑ l = 1 L ( T P l + F P l ) = L a b e l 预 测 为 l 且 分 类 正 确 的 正 样 本 个 数 被 分 类 器 判 定 为 L a b e l 为 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)
召回率是指分类正确的正样本个数占真正的正样本个数的比例。召回率也是对部分样本的统计量,侧重对真实的正类样本的统计。它被定义为:
R e c a l l = T P T P + F N = 分 类 正 确 的 正 样 本 个 数 真 正 的 正 样 本 个 数 Recall=\frac{TP}{TP+FN}=\frac{分类正确的正样本个数}{真正的正样本个数} Recall=TP+FNTP=真正的正样本个数分类正确的正样本个数
多标签:
R e c a l l = ∑ l = 1 L T P l ∑ l = 1 L ( T P l + F N l ) = L a b e l 预 测 为 l 且 分 类 正 确 的 正 样 本 个 数 真 正 的 L a b e l 为 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,值越大意味着模型越好。 它定义为:
F 1 = 2 ⋅ P r e c i s i o n ⋅ R e c a l l P r e c i s i o n + R e c a l l F1=2 \cdot \frac{ Precision \cdot Recall}{Precision+Recall} F1=2⋅Precision+RecallPrecision⋅Recall
F-Beta Score
更一般的$ F_\beta , 它 的 物 理 意 义 就 是 将 准 确 率 和 召 回 率 这 两 个 分 值 合 并 为 一 个 分 值 , 在 合 并 的 过 程 中 , 召 回 率 的 权 重 是 准 确 率 的 β 倍 。 我 们 定 义 ,它的物理意义就是将准确率和召回率这两个分值合并为一个分值,在合并的过程中,召回率的权重是准确率的β倍。我们定义 ,它的物理意义就是将准确率和召回率这两个分值合并为一个分值,在合并的过程中,召回率的权重是准确率的β倍。我们定义 F_\beta $分数为:
$$
F_\beta = (1 + \beta^2) \cdot \frac{precisiont \cdot recall}{(\beta^2 \cdot precision) + recall}
$$
$ \beta $ 本质上是Recall与Precision 权重比, 当 $ \beta = 2 $ 时, F 2 F_2 F2表明 Recall 的权重要比Precision高,其影响更大; 当 $ \beta = 0.5 $ 时, F 0 . 5 F_0.5 F0.5 表明 Recall 的权重要比Precision低, 对应的影响更小;
宏平均F1分数(Macro F1)
宏平均 F1 算法在计算 Precision 与 Recall 时,是先分别计算每个类别的Precision 与 Recall, 然后再进行平均。
P r e c i s i o n i = T P i T P i + F P i Precision_i=\frac{TP_i}{TP_i+FP_i} Precisioni=TPi+FPiTPi
P r e c i s i o n m a c r o = ∑ i = 1 L P r e c i s i o n i ∣ L ∣ Precision_{macro}=\frac{\sum_{i=1}^L Precision_i}{|L|} Precisionmacro=∣L∣∑i=1LPrecisioni
R e c a l l i = T P i T P i + F N i Recall_i=\frac{TP_i}{TP_i+FN_i} Recalli=TPi+FNiTPi
$$
Recall_{macro}=\frac{\sum_{i=1}^L Recall_i}{|L|}
$$
宏平均F1分数公式为:
F 1 m a c r o = 2 ⋅ P r e c i s i o n m a c r o ⋅ R e c a l l m a c r o P r e c i s i o n m a c r o + R e c a l l m a c r o F1_{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 时会将所有类直接放到一起来计算。
P r e c i s i o n m i c r o = ∑ i = 1 L T P i ∑ i = 1 L T P i + ∑ i = 1 L F P i Precision_{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
R e c a l l m i c r o = ∑ i = 1 L T P ∑ i = 1 L T P + ∑ i = 1 L F N Recall_{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分数公式为:
F 1 m i c r o = 2 ⋅ P r e c i s i o n m i c r o ⋅ R e c a l l m i c r o P r e c i s i o n m i c r o + R e c a l l m i c r o F1_{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 的计算如下:
P A = P C = P D = P E = 0.5 , P B = 0.1 P_A=P_C=P_D=P_E=0.5,P_B=0.1 PA=PC=PD=PE=0.5,PB=0.1
P m i c r o = 0.5 + 0.1 + 0.5 + 0.5 4 = 0.4 P_{micro}=\frac{0.5+0.1+0.5+0.5}{4}=0.4 Pmicro=40.5+0.1+0.5+0.5=0.4
P m i c r o = 1 + 10 + 1 + 1 2 + 100 + 2 + 2 = 0.123 P_{micro}=\frac{1+10+1+1}{2+100+2+2}=0.123 Pmicro=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要乘以该类在总样本中的占比来求和。
P r e c i s i o n i = T P i T P i + F P i Precision_i=\frac{TP_i}{TP_i+FP_i} Precisioni=TPi+FPiTPi
P r e c i s i o n w e i g h t e d = ∑ i = 1 L ( P r e c i s i o n i × w i ) ∣ L ∣ Precision_{weighted}=\frac{\sum_{i=1}^L (Precision_i \times w_i)}{|L|} Precisionweighted=∣L∣∑i=1L(Precisioni×wi)
R e c a l l i = T P i T P i + F N i Recall_i=\frac{TP_i}{TP_i+FN_i} Recalli=TPi+FNiTPi
$$
Recall_{weighted}=\frac{\sum_{i=1}^L (Recall_i \times w_i)}{|L|}
$$
加权F1分数公式为:
F 1 w e i g h t e d = 2 ⋅ P r e c i s i o n w e i g h t e d ⋅ R e c a l l w e i g h t e d P r e c i s i o n w e i g h t e d + R e c a l l w e i g h t e d F1_{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 本质上描述了预测结果与实际结果之间的相关系数。
马修斯相关系数公式为:
M C C = T P × T N − F P × F N ( T P + F P ) × ( T P + F N ) × ( T N + F P ) × ( T N + F N ) 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
M C C = 预 测 正 确 的 样 本 − 预 测 错 误 的 样 本 预 测 为 正 样 本 数 × 真 正 正 样 本 数 × 真 正 负 样 本 数 × 预 测 为 负 样 本 数 MCC = \frac{ 预测正确的样本 - 预测错误的样本 }{\sqrt{预测为正样本数\times 真正正样本数 \times 真正负样本数 \times 预测为负样本数}} MCC=预测为正样本数×真正正样本数×真正负样本数×预测为负样本数 预测正确的样本−预测错误的样本
ROC 曲线
在分类任务中,测试样本通常是获得一个概率表示当前样本属于正例的概率, 我们往往会采取一个阈值,大于该阈值的为正例,小于该阈值的为负例。 如果我们减小这个阈值, 那么会有更多的样本被识别为正类,这会提高正类的识别率,但同时会降低负类的识别率。
为了形象的描述上述的这种变化, 引入ROC曲线来评价一个分类器的好坏。ROC曲线也是一个全面评估模型的指标,中文名为“受试者工作特征曲线”。ROC曲线源于军事领域, 而后在医学领域应用甚广, “受试者工作特征曲线”这一名称也正是来自于医学领域。
ROC曲线的横坐标为假阳性率( False Positive Rate, FPR),即将负例错分为正例的概率 ,医学上称为误诊率; 纵坐标为真阳性率( True Positive Rate, TPR),将正例分对的概率。
横坐标:
F P R = F P F P + T N = 将 负 样 本 预 测 正 的 样 本 数 真 正 的 负 样 本 数 FPR = \frac{FP}{FP+TN} = \frac{将负样本预测正的样本数}{真正的负样本数} FPR=FP+TNFP=真正的负样本数将负样本预测正的样本数
纵坐标:
T P R = T P T P + F N = 将 正 样 本 预 测 为 正 的 样 本 数 真 正 的 正 样 本 数 TPR = \frac{TP}{TP+FN}= \frac{将正样本预测为正的样本数}{真正的正样本数} TPR=TP+FNTP=真正的正样本数将正样本预测为正的样本数
在ROC曲线中,设置不同的阈值,会得到不同的TPR和FPR,而随着阈值的逐渐减小,越来越多的实例被划分为正类,但是这些正类中同样也掺杂着负类,即TPR和FPR会同时增大。
- 阈值最大时,所有的正样本预测为负样本,所有的负样本也预测为负样本,即分子都为0,所以FPR = 0, TPR = 0 ,对应坐标点为(0,0)。
- 阈值最小时,所有的负样本预测为正样本,所有的正样本也预测为正样本,即 FPR = 1, TPR = 1,对应坐标点(1,1)。
- 而当FPR = 0, TPR = 1时为最优分类点,分类器对应的ROC曲线应该尽可能靠近坐标轴的左上角,而对角线的位置意味着分类器的效果和随机猜测一样的差。
ROC曲线在测试集中的样本分布发生变化的时候能够保持不变。 但遗憾的是,很多时候, ROC 曲线并不能清晰的说明哪个分类器的效果更好, 而 AUC 恰恰能够对分类器做出直观的评价。
AUC-ROC曲线下的面积(area under the curve)
AUC 为ROC 曲线下的面积, 这个面积的数值介于0到1之间, 能够直观的评价出分类器的好坏, AUC的值越大, 分类器效果越好。
- AUC = 1: 完美的分类器,采用该模型,不管设定什么阈值都能得出完美预测(绝大多数时候不存在)
- 0.5 < AUC < 1: 优于随机猜测,分类器好好设定阈值的话,有预测价值
- AUC = 0.5: 跟随机猜测一样,模型没有预测价值
- AUC < 0.5 :比随机猜测还差,但是如果反着预测,就优于随机猜测。
值得一提的是,两个模型的AUC 相等并不代表模型的效果相同, 如下图所示:
实际场景中, AUC 的确是非常常用的一种指标。
注意:在多分类场景下的 ROC 曲线以及 AUC 值, 此时 ROC 曲线应该有多个,
而AUC 的计算如下: A U C = 2 ∣ C ∣ ( ∣ C ∣ − 1 ) ∑ i = 1 ∣ C ∣ A U C i AUC=\frac{2}{|C|(|C|-1)}\sum_{i=1}^{|C|}{AUC_i} AUC=∣C∣(∣C∣−1)2i=1∑∣C∣AUCi,其中C表示类别数量。
P-R 曲线
我们知道,分类模型的最后输出往往是一个概率值,我们一般需要把概率值转换为具体的类别,对于二分类来说,我们设置一个阈值(threshold),然后大于此阈值判定为正类,反之负类。
以上评价指标(Accuracy、Precision、Recall)都是针对某个特定阈值来说的,那么当不同模型取不同阈值时,如何全面的评价不同模型?而P-R曲线则是描述精确率和召回率变化的曲线。
对于所有的正样本,如何绘制P-R曲线?
设置不同的阈值,模型预测所有的正样本,计算对应的精准率和召回率。横轴是召回率, 纵轴是精确率,如下如所示。
在上图中,我们发现:
- 对于两个不同的分类器,A 完全包住了C, 着意味着A 的Precision 与 Recall 都高于C, A优于C。 而对比 A,B, 二者存在交叉的情况,此时采用曲线下面积大小衡量性能,面积越大,性能越好,此处的A优于B。
- 对于同一个分类器,Precision与Recall的折中(trade off),曲线越靠近右上角性能越好,曲线下的面积叫AP分数,能在一定程度上反应模型的精确率和召回率都很高的比例。但这个值不方便计算,综合考虑精度与召回率一般使用F1值或者AUC值(因为ROC曲线很容易画,ROC曲线下的面积也比较容易计算)。
对数损失
对数损失(Logistic Loss)是对预测概率的似然估计,其标准形式为:
L o g L o s s = − log P ( Y ∣ X ) LogLoss = - \log { P(Y|X)} LogLoss=−logP(Y∣X)
LogLoss衡量的是预测概率分布和真实概率分布的差异性,取值越小越好。与AUC不同,LogLoss对预测概率敏感。
对数损失对应的二分类的计算公式为:
L o g L o s s = − 1 N ∑ i = 1 N ( y i ⋅ log p i + ( 1 − y i ) ⋅ log ( 1 − p i ) ) LogLoss = - \frac{1}{N} \sum_{i=1}^N{(y_i \cdot \log{p_i}+(1-y_i) \cdot \log(1-p_i))} LogLoss=−N1i=1∑N(yi⋅logpi+(1−yi)⋅log(1−pi)),
其中N为样本数, y i ∈ { 0 , 1 } y_i \in { \{ 0,1 \} } yi∈{0,1}, p i p_i pi为第i个样本预测为1的概率。
对数损失在多分类问题中也使用广泛,其计算公式为:
L o g L o s s = − 1 N ⋅ 1 C ∑ i = 1 N ∑ j = 1 C y i j ⋅ log p i j LogLoss = - \frac{1}{N} \cdot \frac{1}{C} \sum_{i=1}^N\sum_{j=1}^C{ y_{ij} \cdot \log{p_{ij} }} LogLoss=−N1⋅C1i=1∑Nj=1∑Cyij⋅logpij
其中,N为样本数,C为类别数, y i j y_{ij} yij表示第i个样本的类别j的分类标签, p i j 第 i 个 样 本 的 类 别 j 的 概 率 。 p_{ij}第i个样本的类别j的概率。 pij第i个样本的类别j的概率。
LogLoss和AUC的区别
- LogLoss主要是评估是否准确,AUC是用来评估是把正样本排到前面的能力,评估的方面不一样。
- LogLoss主要评估整体准确性,多用于数据平衡的情况。AUC用来评估数据不平衡情况下模型的准确度。
- 如果是平衡的分类问题,那么AUC和LogLoss都可以。
总结
通过对比上面的评估指标,总结概况如下:
- 精确率(Precision)是指在所有系统判定的“真”的样本中,确实是真的的占比。
- 召回率(Recall)是指在所有确实为真的样本中,被判为的“真”的占比。
- F1值是为了综合考量精确率和召回率而设计的一个指标。
- MCC 描述了预测结果与实际结果之间的相关系数。
- TPR(真阳性率)的定义,跟Recall一样。
- FPR(假阳性率),又被称为误诊率,就是所有确实为“假”的样本中,被误判真的样本。
- ROC曲线展示的是 TPR 与 FPR的曲线;与之对应的是PR曲线,展示的是Precision 与 Recall的曲线。
- AUC 为ROC 曲线下的面积, 这个面积的数值介于0到1之间, 能够直观的评价出分类器的好坏, AUC的值越大, 分类器效果越好。
- 对数损失是对预测概率的似然估计,衡量的是预测概率分布和真实概率分布的差异性。
对于最终分类指标的选择,在不同数据集,不同场景,不同时间下都会有不同的选择。对于二分类问题,通常用 AUC,而对于多分类,通常看 F1 值。