导读
在机器学习中,我们前期经过数据采集、数据清洗,中期进行特征分析、特征选择,后期对处理好的数据集分割,将数据集划分为训练集、验证集合、测试集,最后基于划分好的数据集进行训练调优,并选择性能最好的模型。那么我们是如何评估我们的模型性能好坏的呢?这就不得不说一下常用的机器学习评级指标了。上车~~
机器学习评价指标
对于机器学习中评价模型性能的指标,常用的有准确率、精度、召回率、P-R曲线、F1 分数、ROC、AUC以及混淆矩阵等。这里我们先以二分类举例讲解,后边推及到多分类即可。
在二分类中,我们称呼两类样本分别为正类和负类。模型训练好之后,我们让模型对测试集数据进行预测,并对预测结果进行评估。下面介绍几个概念:
- 真正例(True Positive, TP):被模型预测为正类的正类样本;
- 假正例(False Positive, FP):被模型预测为正类的负类样本;
- 真负例(True Negative, TN):被模型预测为负类的负类样本;
- 假负例(False Negative, FN):被模型预测为负例的正类样本。
我们上边提到的集中指标都是基于以上四个概念进行计算的,下面分别介绍。
-
准确率(Accuracy)
准确率是分类问题最原始的评价指标,反映了预测正确结果占总样本的百分比,其定义为:
A c c u r a c y = T P + T N T P + T N + F P + F N \begin{aligned} Accuracy = &\frac{TP + TN}{TP + TN + FP + FN}\\ \end{aligned} Accuracy=TP+TN+FP+FNTP+TN
从准确率的定义式我们可以看出猫腻,假如数据集中样本分布不均衡,100个样本中有99个都是正样本,只有一个负样本,这时候模型很容易对正样本过拟合,而且不认识负类样本。不管三七二十一,只要碰到一个样本,便预测其为正类,这时候计算出来准确率为99%,但我们都知道这种模型是不能没有任何意义的(对负类样本没有判断能力)。所以对模型评估的时候只看准确率是不客观的,片面的,还需要结合其他指标一起判断。 -
精度(Precision)
精度是反映了所有预测为正类的样本中实际为正类样本的概率,即在所有预测为正类的样本中,真正的正类样本有多少,其定义为:
P
r
e
c
i
s
i
o
n
=
T
P
T
P
+
F
P
\begin{aligned} Precision = &\frac{TP}{TP + FP}\\ \end{aligned}
Precision=TP+FPTP
准确率反映了模型对整体数据的预测能力(既包括正样本,也包括负样本),而精度指标反映了我们的模型对正类样本的预测准确程度。
- 召回率(Recall)
精度指标反映了我们的模型对正类样本的预测准确程度。那我们可以理解召回率表示了模型对正样本的实际甄别能力,即模型预测为正类样本数占所有真正的正类样本的百分比,其定义为:
R
e
c
a
l
l
=
T
P
T
P
+
F
N
\begin{aligned} Recall = &\frac{TP}{TP + FN}\\ \end{aligned}
Recall=TP+FNTP
召回率和准确率是一对此消彼长的指标,例如在典型的猫狗分类中,我们想提升模型对于狗的召回率,那么可能会有猫也被判定为狗,这样一来狗的准确率就下降了。在实际工程中,我们往往需要对这两个指标做Trade-Off,寻找一个平衡点,使得模型性能更加贴合具体的业务场景。
-
P-R曲线(Precision-Recall Curve)
P-R曲线(Precision Recall Curve)正是描述精确率/召回率变化的曲线,P-R曲线定义如下:根据模型的预测结果(一般为一个实值或概率)对测试样本进行排序,将最可能是“正例”的样本排在前面,最不可能是“正例”的排在后面,按此顺序逐个把样本作为“正例”进行预测,每次计算出当前的P值和R值,如下图所示:
P-R曲线如何评估呢?若一个模型B的P-R曲线被另一个学习器A的P-R曲线完全包住(即模型A的precision和recall均大于模型B),则称:A的性能优于B。若A和B的曲线发生了交叉,则谁的曲线下的面积大,谁的性能更优。但一般来说,曲线下的面积是很难进行估算的,所以衍生出了“平衡点”(Break-Event Point,简称BEP),即当P=R时的取值,平衡点的取值越高,性能更优。如图所示。 -
F1 分数(F1-Score)
正如上文所述,Precision和Recall指标有时是此消彼长的,即精准率高了,召回率就下降,在一些场景下要兼顾精准率和召回率,最常见的方法就是F-Measure,又称F-Score。F-Measure是P和R的加权调和平均,定义为:
1 F β = 1 1 + β 2 ∗ ( 1 P + β 2 R ) . . . . . . . . . . . . . . . . . . . ( 1 ) \begin{aligned} &\frac{1}{F_\beta} = \frac{1}{1 + \beta^{2} } * (\frac{1}{P} + \frac{\beta ^{2} }{R} )\\ \end{aligned} ................... (1) Fβ1=1+β21∗(P1+Rβ2)...................(1)
F β = ( 1 + β 2 ) ∗ P ∗ R β 2 ∗ P + R . . . . . . . . . . . . . . . . . . . . . . . . . ( 2 ) \begin{aligned} F_\beta = \frac{(1 + \beta ^2) * P * R}{\beta ^2 * P + R}\\ \end{aligned} ......................... (2) Fβ=β2∗P+R(1+β2)∗P∗R.........................(2)
当β = 1的时候,就是我们说的 F1 分数,即:
F 1 = 2 ∗ P ∗ R P + R . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ( 3 ) \begin{aligned} F_1 = \frac{2 * P * R}{P + R}\\ \end{aligned} ..................................... (3) F1=P+R2∗P∗R.....................................(3)
从式子(1)中,我们可以看到F1分数是P(Precision)和R(Recall)的调和平均,当F1分数较高时,模型的性能也越好。 -
ROC曲线(ROC Curve)
前边讲了Accuracy、Precision、Recall,他们互相弥补,可以多方面评估模型性能,你可能觉得已经很好地评估模型了,但是这还不够,因为当测试集中地正类样本和负类样本比例发生变化的时候,这些指标也会发生变化,所以这些指标的鲁棒性还是不那么强。为了避免测试集中样本分布变化对测试结果的影响,我们引入ROC曲线和AUC曲线。
ROC曲线和上边提到的P-R曲线一样,是一种不依赖于阈值的评价指标,在输出为概率的分布模型中,如果仅使用准确率、精确率、召回率作为评价指标进行模型对比时,都必须时基于某一个给定阈值的,对于不同的阈值,各模型的Metrics结果也会有所不同,这样就很难得出一个高置信度的结果。介绍之前我们还需引入几个指标概念: - 灵敏度(Sensitivity), 也叫做真正率(TPR)
T P R = 正 样 本 预 测 正 确 数 正 样 本 总 数 = T P T P + F N \begin{aligned} TPR = &\frac{正样本预测正确数}{正样本总数} = \frac{TP}{TP + FN}\\ \end{aligned} TPR=正样本总数正样本预测正确数=TP+FNTP - 特异度(Specificity), 也叫做真负率(TFR)
F P R = 负 样 本 预 测 正 确 数 负 样 本 总 数 = T N T N + F P \begin{aligned} FPR = &\frac{负样本预测正确数}{负样本总数} = \frac{TN}{TN + FP}\\ \end{aligned} FPR=负样本总数负样本预测正确数=TN+FPTN - 假正率(FTR)
T P R = 负 样 本 预 测 错 误 数 负 样 本 总 数 = F P T N + F P \begin{aligned} TPR = &\frac{负样本预测错误数}{负样本总数} = \frac{FP}{TN + FP}\\ \end{aligned} TPR=负样本总数负样本预测错误数=TN+FPFP - 假负率(FNR)
T P R = 正 样 本 预 测 错 误 数 正 样 本 总 数 = F P F P + T N \begin{aligned} TPR = &\frac{正样本预测错误数}{正样本总数} = \frac{FP}{FP + TN}\\ \end{aligned} TPR=正样本总数正样本预测错误数=FP+TNFP
从它们的定义是中我们可以看到,灵敏度就是正样本的召回率,特异度就是负样本的召回率,而假负率和假正率分别等于1 - TPR和1 - TNR,上述四个概念都是针对单一类别(正样本或者负样本)的预测结果而言的,所以对整体样本是否均衡并不敏感。我们还是拿样本不均衡的例子解释一下,假设总样本中,90%是正样本,10%是负样本。在这种情况下我们如果使用准确率进行评价是不科学的,但是用TPR和TNR却是可以的,因为TPR只关注90%正样本中有多少是被预测正确的,而与那10%负样本毫无关系,同理,FPR只关注10%负样本中有多少是被预测错误的,也与那90%正样本毫无关系。这样就避免了样本不平衡的问题。
如图所示,ROC曲线的两个主要指标就是TPR和FPR,与P-R曲线类似,ROC曲线也是通过不同阈值下的TPR和FPR绘制出来的,但是P-R曲线的横纵坐标为Precision和Recall,它们会随着阈值的不同曲线会发生变化,但是ROC因为选取的是TPR和FPR,曲线形状不受与之选择的影响。即阈值不会影响我们使用ROC曲线来评估模型的性能。而且ROC不受类别不均衡的影响,无论正负样本的分布及比例怎么变化,ROC曲线不变,这是经过实验验证的。
-
AUC(Area Under Curve)
AUC(Area Under Curve),为线下面积,是ROC曲线与TPR与FPR两坐标轴围成区域的面积大小。其中TPR为纵轴,FPR为横轴,因为TPR为正样本预测正确数占正样本总数的百分比,我们肯定希望它越高越好,FPR为预测错误的负样本数占负样本总数的百分比,我们肯定希望它越低越好,所以可以推断出ROC曲线越陡峭,说明模型的性能越好,相应地AUC也就越大。
如果模型是完美的,那么它的AUC = 1,证明所有正例排在了负例的前面,如果模型是个简单的二类随机猜测模型,那么它的AUC = 0.5,如果一个模型好于另一个,则它的曲线下方面积相对较大,对应的AUC值也会较大。 -
混淆矩阵(Confusion Matrix)
混淆矩阵可以直观地反应模型预测分类的结果,顾名思义,它反映了模型预测分类的混淆程度。矩阵的第 i 行和第 j 列代表的是标签为 i 类别的样本被分类为 j 类别的样本个数。对角线上为所有预测正确的样本数目。在深度学习的图像分类任务中,混淆矩阵是比较通用的评价指标,它反映了模型对各个类别的判断能力和学习效果。
总结
在这篇文章中,我们介绍了机器学习领域中模型评价的常用指标,分别由准确率(Accuracy)、精度(Precision)、召回率(Recall)、P-R曲线、ROC曲线、AUC以及混淆矩阵。大家在具体使用过程中可以结合自己的业务场景和任务,以及自己领域比较主流的指标进行评估。希望文章能够在大家需要的时候帮助到大家,同时也是我自己的一边复习,跟大家一起进步是很开心的一件事情。大家有什么疑问或者意见欢迎评论区交流,文章对您有帮助的话别忘了留个赞再走哦~对于搞机器学习的小伙伴可以收藏,总是要用到的嘿嘿。