- 文章从模型评估的基本概念开始,分别介绍了常见的分类模型的评估指标和回归模型的评估指标以及这些指标的局限性。部分知识点举例加以阐述,以便加深理解。思维导图如下:
1 基本概念
-
模型评估用来评测模型的好坏。
-
模型在训练集上的误差通常称为 训练误差 或 经验误差,而在新样本上的误差称为 泛化误差。显然,机器学习的目的是得到泛化误差小的学习器。然而,在实际应用中,新样本是未知的,所以只能使训练误差尽量小。
-
所以,为了得到泛化误差小的模型,在构建机器模型时,通常将数据集拆分为相互独立的训练数据集、验证数据集和测试数据集等,而在训练过程中使用验证数据集来评估模型并据此更新超参数,训练结束后使用测试数据集评估训练好的最终模型的性能。
-
模型的比较:
- 一次训练过程中的模型比较。
- 多次训练模型比较。
- 不同算法的模型比较。
2 评估指标的局限性
- 在模型评估过程中,分类问题、排序问题、回归问题往往需要使用不同的指标进行评估。在诸多的评估指标中,大部分指标只能片面地反映模型的一部分性能。如果不能合理地运用评估指标,不仅不能发现模型本身的问题,而且会得出错误的结论。
3 分类模型的评估指标
- 正样本:需要判定概率为1的类型的样本叫做正样本。
- 负样本:需要判定概率为0的类型的样本叫做负样本。
3.1 混淆矩阵(Confusion Matrix)
- |误差矩阵|预测正值|预测负值|
|---|---|---|
|真实正值|TP|FN|
|真实负值|FP|TN| - True Positive(真正, TP):将正类预测为正类数。
- True Negative(真负 , TN):将负类预测为负类数。
- False Positive(假正, FP):将负类预测为正类数。--> 误报(Type I error):假的正样本(实际是负样本)。
- False Negative(假负 , FN):将正类预测为负类数。--> 漏报(Type II error):假的负样本(实际是正样本)。
3.2 准确率(Accuracy)
- 准确率是指分类正确的样本占总样本个数的比例。
-
[ACC = frac{TP+TN}{TP+TN+FP+FN} ]
- 准确率是分类问题中最简单也是最直观的评价指标,但存在明显的缺陷。比如,当负样本占99%时,分类器把所有样本都预测为负样本也可以获得99%的准确率。所以,当不同类别的样本占比十分不平衡时,占比较大的样本对准确率影响较大。
3.3 精确率(Precision)
- 精确率是指分类正确的正样本个数占分类器判定为正样本的样本个数的比例,又叫查准率。
-
[P = frac{TP}{TP+FP} ]
- TP+FP代表无论真与假,报出来数据都是正样本。
3.4 召回率(Recall)
- 召回率是指分类正确的正样本个数占真正的正样本个数的比例,又叫查全率。
-
[R = frac{TP}{TP+FN} ]
3.5 precision与recall小例子
- 金融诈骗分类中,正样本P代表是金融诈骗;负样本N代表不是金融诈骗。假设正样本P有100个,负样本N有100个。取threshold=0.5得TP=80,FP=20,问precision和recall分别是多少?如果取threshold=0.9,precision和recall将有什么变化?
- (Precision = TP/(TP+FP)=0.8);也可算误报率0.2,1-0.2 =0.8;
- (Recall = TP/(TP+FN) = 0.8);也可计算漏报率0.2,1-0.2=0.8;
- 若threshold=0.9,则TP减小,TP+FP减小,precision不确定;极端情况下FP为0,precision会上升。TP+FN不变,因此recall会减小。
- 通过上面的例子我们发现:实际上precision和recall没什么关系。
3.6 P-R(Precision-Recall)曲线
- 这里简单介绍一下P-R曲线的绘制方法。P-R曲线的横轴是召回率,纵轴是精确率。对于一个排序模型来说,其P-R曲线上的一个点代表着,在某一阈值下,模型将大于该阈值的结果判定为正样本,小于该阈值的结果判定为负样本,此时返回结果对应的召回率和精确率。
- PR曲线越靠近右上越好。
3.7 F1 score
- F1 score和ROC曲线也能综合地反映一个排序模型的性能。
- 是精准率和召回率的调和平均值,它定义为(F1=frac{2 imes Precision imes Recall}{Precision + Recall})。
-
[frac{2}{F_1} = frac{1}{P} + frac{1}{R} ]
-
[F_1 = frac{2TP}{2TP+FP+FN} ]
3.8 ROC曲线
- ROC曲线的纵坐标为真阳性率(True Positive Rate,TPR);横坐标为假阳性率(False Positive Rate,FPR)。TPR和FPR的计算方法分别为:
[TPR = frac{TP}{TP+FN}
]
[FPR = frac{FP}{FP+TN}
]
上式中,P是真实的正样本的数量,N是真实的负样本的数量,TP是P个正样本中被分类器预测为正样本的个数,FP是N个负样本中被分类器预测为正样本的个数。
- 实际上,TPR就是召回率,FPR是负样本角度的召回率,即误召率。
- AUC指的是ROC曲线下的面积大小,该值能够量化地反映基于ROC曲线衡量出的模型性能。计算AUC值只需要沿着ROC横轴做积分就可以了。由于ROC曲线一般都处于y=x这条直线的上方(如果不是的话,只要把模型预测的概率反转成1−p就可以得到一个更好的分类器),所以AUC的取值一般在0.5~1之间。AUC越大,说明分类器越可能把真正的正样本排在前面,分类性能越好。
- ROC曲线越靠近左上越好。
3.9 Roc曲线与P-R曲线有何不同?
- 相比P-R曲线,ROC曲线有一个特点,当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变(稳定),而P-R曲线的形状一般会发生较剧烈的变化(敏感)。
- 选择P-R曲线还是ROC曲线是因实际问题而异的,如果研究者希望更多地看到模型在特定数据集上的表现,P-R曲线则能够更直观地反映其性能。
3.10 分类模型评估指标小结
指标 | 描述 | Scikit-learn函数 |
---|---|---|
Confusion Matrix | 混淆矩阵 | from sklearn.metrics import confusion_matrix |
Precision | 精确率 | from sklearn.metrics import precision_score |
Recall | 召回率 | from sklearn.metrics import recall_score |
F1 | F1值 | from sklearn.metrics import f1_score |
ROC | ROC曲线 | from sklearn.metrics import roc |
AUC | ROC曲线下的面积 | from sklearn.metrics import auc |
4 回归模型的评估指标
4.1 均方误差(MSE)
- 公式:(frac{1}{m} sum_{i=1}^{m}(hat{y_i} - y_i)^2)
- 真实值-预测值,平方和求平均。
- 这不就是线性回归的损失函数嘛!对,在线性回归的时候我们的目的就是让这个损失函数最小。那么模型做出来了,我们把损失函数丢到测试集上去看看损失值不就好了嘛。简单直观暴力!
- 最常用的回归模型的评估指标。
4.2 均方根误差(RMSE)
- 公式:(sqrt{frac{1}{m} sum_{i=1}^{m}(hat{y_i} - y_i)^2})
- MSE开个根号。数据太大可以开根号。
- RMSE能够很好地反映回归模型预测值与真实值的偏离程度。但在实际问题中,如果存在个别偏离程度非常大的离群点(Outlier)时,即使离群点数量非常少,也会让RMSE指标变得很差。
- 模型在95%的时间区间内的预测误差都小于1%,取得了相当不错的预测结果。那么,造成RMSE指标居高不下的最可能的原因是什么?--离群点。
解决办法?可以从三个角度来思考。- 第一,如果我们认定这些离群点是“噪声点”的话,就需要在数据预处理的阶段把这些噪声点过滤掉。
- 第二,如果不认为这些离群点是“噪声点”的话,就需要进一步提高模型的预测能力,将离群点产生的机制建模进去(这是一个宏大的话题,这里就不展开讨论了)。
- 第三,可以找一个更合适的指标来评估该模型。关于评估指标,其实是存在比RMSE的鲁棒性更好的指标,比如平均绝对百分比误差(Mean Absolute Percent Error,MAPE),它定义为(MAPE = sum_{i=1}^{n}|frac{y_i - ar{y_i}}{y_i}| imes frac{100}{n}).MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。
4.3 平均绝对误差(MAE)
- Mean Absolute Error ,是绝对误差的平均值,能更好地反映预测值误差的实际情况.
- (frac{1}{m} sum_{i=1}^{m}|hat{y_i} - y_i|)
4.4 可决系数(R-Squared)
- (R^2 = 1 - frac{sum_{i=1}(hat{y_i}-y_i)^2}{sum_{i=1}(ar{y_i}-y_i)^2})
- 其中,(hat{y_i})是预测值,(ar{y_i})是预测值的平均值。(R^2<=1)且越大越好。
4.5 回归模型的评估指标小结
指标 | 描述 | Scikit-learn函数 |
---|---|---|
Mean Square Error (MSE, RMSE) | 平均方差 | from sklearn.metrics import mean_squared_error |
Absolute Error (MAE, RAE) | 绝对误差 | from sklearn.metrics import mean_absolute_error, median_absolute_error |
R-Squared | R平方值 | from sklearn.metrics import r2_score |