常用的机器学习模型评估指标
本文最后更新于:4 个月前
本文根据任务类型分类整理了常用的机器学习模型评估指标。
1. 分类任务
1.1 混淆矩阵[1]
混淆矩阵是用于评估分类模型性能的 $N \times N$ 矩阵,其中 $N$ 是目标类的数量(本文以二分类为例讲解分类任务指标)。

图片来自:confusion-matrix
在二分类中,根据样本的真实标签和模型预测结果,可以将所有测试样本分为四类:
- TP(True Positive):被正确预测的正例。即该数据的真实值为正例,预测值也为正例的情况;
- TN(True Negative):被正确预测的负例。即该数据的真实值为负例,预测值也为负例的情况;
- FP(False Positive):被错误预测的正例。即该数据的真实值为负例,但被错误预测成了正例的情况;
- FN(False Negative):被错误预测的负例。即该数据的真实值为正例,但被错误预测成了负例的情况。
基于上述四类样本的定义,可以进一步得出如下指标定义:
- 真正率(True Positive Rate,TPR)或灵敏度(sensitivity):$TPR=\cfrac{TP}{TP+FN}$ ,即被正确预测的正例数 / 正样本总数;
- 真负率(True Negative Rate,TNR)或特指度/特异度(specificity):$TNR=\cfrac{TN}{TN+FP}$,即被正确预测的负例数 / 负样本总数;
- 假正率 (False Positive Rate,FPR):$FPR = \cfrac{FP}{TN+FP}$,即被错误预测的正例数 / 负样本总数;
- 假负率(False Negative Rate ,FNR):$FNR = \cfrac{FN}{TP+FN}$,即被错误预测的负例数 / 正样本总数。
1.2 准确率(Accuracy)
$$
\text{Accuracy} = \frac{TP+TN}{TP+FN+FP+TN}
$$
准确率(或正确率)为预测正确的样本数占总样本数的比例。
准确率是分类问题中最简单也是最直观的评价指标,同时计算简单,时间复杂度低,但存在明显的缺陷。比如,当负样本占 99% 时,分类器把所有样本都预测为负样本也可以获得 99% 的准确率。所以,当不同类别的样本比例非常不均衡时,占比大的类别往往成为影响准确率的最主要因素。
为了解决这个问题,可以使用更为有效的平均准确率(每个类别下的样本准确率的算术平均)作为模型评估的指标。
1.3 错误率(Error rate)
正确率与错误率是分别从正反两方面进行评价的指标,两者数值相加刚好等于 1。正确率高,错误率就低;正确率低,错误率就高。
$$
\text{Error Rate} = \frac{FP+FN}{TP+FN+FP+TN}
$$
错误率为预测错误的样本数占总样本数的比例。
1.4 精确率(Precision)
精确率又称查准率,度量了预测为正例的样本中实际有多少为正例。
$$
\text{Precision} = \frac{TP}{TP+FP}
$$
即预测正确的正例数占预测为正例的样本数的比例。
1.5 召回率(Recall)
召回率又称查全率,与真正率相等,度量了在实际正样本中,分类器能预测出多少。
$$
\text{Recall} = \cfrac{TP}{TP+FN}
$$
即预测正确的正例数占正样本数的比例。
Precision 和 Recall 是既矛盾又统一的两个指标,为了提高 Precision,分类器需要尽量在“更有把握”时才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致 Recall 降低。
1.6 P-R 曲线
P-R 曲线的横轴是召回率,纵轴是精确率。对于一个排序模型来说,其 P-R 曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。整条 P-R 曲线是通过将阈值从高到低移动而生成的。下图为P-R曲线样例图,其中实线代表模型 A 的 P-R 曲线,虚线代表模型 B 的 P-R 曲线。原点附近代表当阈值最大时模型的精确率和召回率。

由图可见,当召回率接近于 0 时,模型A的精确率为 0.9,模型 B 的精确率是 1, 这说明模型B得分前几位的样本全部是真正的正样本,而模型 A 即使得分最高的几个样本也存在预测错误的情况。并且,随着召回率的增加,精确率整体呈下降趋势。但是,当召回率为 1 时,模型 A 的精确率反而超过了模型 B。这充分说明,只用某个点对应的精确率和召回率是不能全面地衡量模型的性能,只有通过P-R曲线的整体表现,才能够对模型进行更为全面的评估。
除此之外,F1 score 和 ROC 曲线也能综合地反映一个排序模型的性能。
1.7 F1 score
F1 score 是精确率和召回率的调和平均值,同时也是精确率和召回率的加权平均值,介于 0-1 之间。F1 score 的计算公式如下:
$$
F_1 = 2 \times \frac{Precision \times Recall}{Precision + Recall}
$$
Precision 体现了模型对负样本的区分能力,Precision 越高,模型对负样本的区分能力越强;Recall 体现了模型对正样本的识别能力,Recall 越高,模型对正样本的识别能力越强。F1 score 是两者的综合,F1 score 越高,说明模型越稳健。
1.8 ROC 曲线与 AUC
1.8.1 什么是 ROC 曲线?
ROC(Receiver Operating Characteristic)曲线,中文名为“受试者工作特征曲线”,适用于二元分类器模型(具有两个类的分类器)。
ROC 曲线的横坐标为假正率(FPR),即特异度,等于被错误预测的正例数 / 负样本总数;纵坐标为真正率(TPR),即灵敏度,召回率,等于被正确预测的正例数 / 正样本总数;
$$
FPR = \frac{FP}{TN + FP}, TPR = \frac{TP}{TP + FN}
$$
1.8.2 如何绘制 ROC 曲线?
对于一个分类器的分类结果,可以通过计算不同分类阈值下的 $(FPR, TPR)$ 来生成一组关键点,这些关键点可以在二维平面直角坐标系中标出。若选取的分类阈值足够多,则可以在坐标系上画出许多个点。这些点形成了一条曲线,即 ROC 曲线。
正常情况下,随着阈值的逐渐减小,越来越多的实例被划分为正类,但同时这些预测为正的样本中也会掺杂着越来越多的负样本(假阳性样本),即TPR和FPR会同时增大。阈值最大时,对应坐标点为 $(0,0)$,阈值最小时,对应的坐标点为 $(1,1)$。

图片取自:mathworks。
横坐标 $FPR$ 越大,预测为正的样本中包含的负样本越多;纵坐标 $TPR$ 越大,预测为正的样本中包含的证样本越多。
理想情况下,当 $FPR=0$ 时,$TPR=1$,即图中 $(0,1)$ 点。因此,ROC曲线越靠近 $(0,1)$ 点,偏离45度对角线越多越好。
1.8.3 什么是 AUC?
AUC 指的是 ROC 曲线下的面积大小,该值能够量化地反映基于 ROC 曲线衡量出的模型性能。ROC 不依赖阈值,是一个可以全面衡量模型表现的数值指标。由于 ROC 曲线一般都处于 $y=x$ 这条直线的上方,所以 AUC 的取值一般在 0.5~1 之间。AUC 越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。
1.8.4 如何计算 AUC?
在实现上,可以简单地把 ROC 曲线下方的区域看成多个细高的长方形,其中每个长方形的面积分别是 $TPR$ 值乘以相应的 $FPR$ 的间隔,然后把这些长方形的面积累加起来就是 AUC 的近似值,即求 ROC 曲线下的黎曼和。注意:$FPR$ 间隔取的越细(长方形越细),则面积计算越准确,越接近 AUC 的真实值。
什么是黎曼和?
这里有一块形状不规则的土地,要测量它的面积,怎么办呢?一个叫黎曼的德国数学家(Bernhard Riemann, 1826-1866),他想了个办法:将这不规则图形切成一条条的小长条儿,然后将这个长条近似的看成一个矩形,再分别测量出这些小矩形的长度,再计算出它们的面积,把所有矩型面积加起来就是这块不规则地的面积。这就是著名的“黎曼和”。小长条宽度趋于0时,即为面积微分,各个面积求和取极限即为定积分。虽然牛顿时代就给出了定积分的定义,但是定积分的现代数学定义却是用黎曼和的极限给出。
参考:百度百科。
除上述方法,还有一种从统计角度出发计算 AUC 的更快速的方法:如果测试集中有 $m$ 个正样本和 $n$ 个负样本,则可以生成 $m \times n$ 个样本对,统计这些样本对中模型判断结果为正例概率大于为负例的概率的个数,然后除以 $m \times n$,即得到 AUC 的值。这种方法的 AUC 计算公式为:
$$
\text{AUC} = \text{Prob}(P_p>P_n)
$$
其中,$\text{Prob}(P_p>P_n)$ 是用频率估计的 $P_p>P_n$ 的概率。
1.9 对数损失(Log loss)
见:常见的损失函数。
2. 回归任务
2.1 平均绝对误差(Mean absolute error,MAE)
$$
\text{MAE} = \frac{1}{n}\sum_{i=1}{n}\rvert{y_i-\hat{y_i}}\rvert
$$
2.2 均方误差(Mean square error,MSE)
$$
\text{MSE} = \frac{1}{n}\sum_{i=1}{n}(y_i-\hat{y_i})^2
$$
2.3 均方根误差(Root mean square error,RMSE)
均方根误差(root-mean-square error,RMSE),又称均方根偏差(root-mean-square deviation,RMSD),常用于衡量模型预测值与观测值之间差异的一种指标。均方根误差是精度的度量,用于比较特定数据集的不同模型的预测误差,但不能比较数据集之间的预测误差,因为它是尺度依赖的。
$$
\text{RMSE} = \sqrt{\text{MSE}}
$$
2.4 归一化均方根误差(Normalized root mean square error,NRMSE)
將均方根誤差正規化,可以使不同數值範圍的資料集之間更易於比較。雖然目前並沒有一個一致的方法來正規化均方根差,但較常用平均值或是極差(最大和最少值之差)來正规化被量測的資料。
$$
\text{NRMSE} = \frac{\text{RMSE}}{y_{max}-y_{min}} 或 \text{NRMSE} = \frac{\text{RMSE}}{\bar{y}}
$$
2.5 决定系数(R2 score)
$$
R^2 = 1 - \frac{\sum_{i=1}^n(y_i-\hat{y_i})^2}{\sum_{i=1}^n(y_i-\bar{y_i})^2}
$$
R2 的含义是,预测值解释了 $y_i$ 变量的方差的多大比例,衡量的是预测值对于真值的拟合好坏程度。通俗理解,假定 $y_i$ 的方差为 1 个单位,则 R2 表示”使用该模型之后,$y_i$ 的残差的方差减少了多少”。比如 R2 等于 0.8,则使用该模型之后残差的方差为原始 $y_i$ 值方差的 20%。
- R2 = 1:最理想情况,所有的预测值等于真值。
- R2 = 0:一种可能情况是”简单预测所有 y 值等于 y 平均值”,即所有 都等于(即真实 y 值的平均数),但也有其他可能。
- R2 < 0:模型预测能力差,比”简单预测所有 y 值等于 y 平均值”的效果还差。这表示可能用了错误模型,或者模型假设不合理。
- R2 的最小值没有下限,因为预测可以任意程度的差。因此,R2 的范围是 $(-\infty, 1]$ 。
注意:R2并不是某个数的平方,因此可以是负值。
- https://www.ml-science.com/confusion-matrix ↩
- https://zhuanlan.zhihu.com/p/86120987 ↩
- https://developers.google.com/machine-learning/crash-course/classification/ ↩
- 诸葛越,葫芦娃《百面机器学习 算法工程师带你去面试》第2章 ↩
- 张觉非,陈震《用Python实现深度学习框架》第9章 ↩
- https://zhuanlan.zhihu.com/p/143132259(关于R2的理解) ↩