没有测量,就没有科学 ——门捷列夫
原本之前的知识点总结里面没有太多关于模型评估的内容,QA这部分开始也没打算单独整理出来模型评估的部分。不过考虑到一个模型的评估指标是一个机器学习任务核心的部分,需要清楚各类机器学习任务的评估指标,那就汇总整理一下。
- 评估指标
- 评估方法
评估指标
机器学习的问题主要有分类、回归、聚类等等
当我们选择评估指标的时候,要考虑具体的任务目标,要考虑具体的数据样本。有的时候我们关注准确率,有时候关注精准率,有时候更关注召回,不同的指标结果评定不同的任务产出。
1、分类
1.1 准确率 Accuracy
准确率指的是分类正确的样本占总样本个数的比例:
其中是分类正确的样本数, N是样本总数。
准确率是我们最常见最基本的评估指标,但是我们常见的机器学习任务中遇到的数据太多数情况下都是正负样本不均衡,这个时候就没有什么参考价值了。
比如一个数据样本中,正样本比例为99%,那我们把全部样本预测为正样本那就可以得到99%的准确率,我们一看,哇,准确率这么高,拿着这个模型去预测新数据集,GG......显然是不合适的。
1.2 混淆矩阵
我们假设是二分类模型,那必然有样本的真实情况和模型的预测情况,我们将真实情况和预测情况放在同一个表格里面,这就是混淆矩阵(Confusion Matrix)。如下图所示。
其中:
T
:True, F
:False, P
:Positive, N
: Negative.
True positive
真正例:实际为正,预测为正
False positive
假正例:实际为负,预测为正
True negative
真反例:实际为负,预测为负
False negative
假反例:实际为正,预测为负
根据这个表,我们可以将上面的准确率表示为
为什么要这个混淆矩阵呢,我认为这样可以把更精细的把结果评估分离出来,我们可以根据具体的任务来选择需要的数据结果进行来计算评估。
1.3 精确率(查准率)Precision、召回率(查全率)Recall
精确率Precision指的是分类正确的正样本数占预测出来为正样本个数的比例。
白话就是说,我模型预测说它们是正样本,那这个里面到底多少是真正的正样本呢。
分母是TP+FP
,看的是在模型预测出来的样本里面。
召回率Recall指的是分类正确的正样本数占真正的正样本个数的比例。
白话说就是,在真正的正样本里面,实际的正样本的里面,我能找出来多少,能预测出来多少。
分母是TP+FN
,看的是实际样本。
但是Precision和Recall两者既矛盾又统一,为了提高Precision,那预测的时候就更加保守,把更有把握的样本才预测为正样本,但是同时因为模型的保守,放弃很多有可能预测为正的样本,导致Recall降低。
一方面我们需要根据具体的业务场景来选择是用Precision还是Recall来评定,一方面我们需要其他的指标来综合Precision和Recall。
1.4 PR曲线
P-R曲线,横轴是Recall,纵轴是Precision。
PR曲线如何绘制。
我们将模型的预测结果对样例进行排序,预测出来的概率0-1之间,我们降序排列,前面的更有可能是正样本,越到后面越有可能是负样本,这就是一个阈值选择的问题。我们按照降序一个一个样本划分,前面的为正,后面的为负,由此计算当前的Recall,Precision,然后按照Recal为横轴,Precision为纵轴作图。
如果一个模型的PR曲线包住了另外一个,比如上图中的A、C,我们说A的性能优于C。
我们引入一个平衡点(BEP),来比较BEP。
我们就是要找出一个阈值,找出一个平衡点,来兼顾Precision和Recall。
1.5 F1
我们需要一个指标来综合PR的性能,F1度量:
F1度量的一个一般形式是:
面试中可能会问F1中的1指的是什么?这个1就是这里面的,度量了Recall对Precision的相对重要性。
1.6 ROC与AUC
真正率:
分母是真实的正样本数量,考虑的是正样本方面
假正率:
分母是正式的负样本数量,考虑的是负样本方面
这样ROC曲线中既考虑了正样本,又考虑了负样本,因此避免了正负样本不平衡带来的影响。
与P-R曲线类似,我们根据模型的预测结果对样例进行排序,我们按照顺序一个一个将样本划分成正、负,每次计算两个值,“真正率”做为纵轴,“假正率”做为横轴。
AUC指的是ROC曲线下的面积大小。由图可见,一般ROC的曲线都在y=x直线上面,AUC的取值一般为0.5-1之间,AUC越大,说明模型越可能把正真的正样本排在前面,分类性能越好。
1.7 PR曲线与ROC曲线对比
按照周志华老师的《机器学习》中所说。
相比P-R曲线,ROC曲线有一个特点,当正负样本的分布发生变化时,ROC曲线的形状能够基本保持不变,而P-R曲线的形状一般会发生较剧烈的变化。
这样可能让ROC曲线能够尽量降低不同测试集带来的干扰,更加客观地衡量模型本身的性能。
所以在推荐、广告领域中,ctr、cvr模型中,往往正负样本极其不平衡,负样本是正样本的很多很多倍,所以这时候看ROC曲线,AUC的值就更为可靠。
2、回归
2.1 平均绝对误差MAE(Mean Absolute Error)
2.2 平均平方误差MSE(Mean Squared Error)
2.3 RMSE
RMSE能够很好反应回归模型预测值与真实值的偏离程度。但是还是考虑实际的数据情况,如果存在个别的离群点,就会影响RMSE指标结果。
参考HuLu老师们的话,
对于这种离群点,怎么解决呢?
- 如果我们认为这些点确实是噪声,那在数据预处理阶段就要处理掉;
- 如果不认为是噪声,那我们就要进一步提高模型的预测能力;
- 找一个更合适的指标来评估,如下
2.4 平均绝对百分比误差MAPE(Mean Absolute Percent Error)
相比RMSE,MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来的绝对误差的影响。
3、除此之外,LR、SVM、聚类等等算法都有对应的损失函数,评估指标,后续小结再整理
评估方法
1、留出法
“留出法“直接将数据集划分为两个互斥的集合,一个作为训练集,一个作为测试集。
train/test在划分的时候要尽可能地保持数据分布一致,避免划分之后带来额外地偏差。
我们可以多次随机划分,重复的实验,最终的评估结果就是多次实验结果的平均。
如果样本数据集比较少,评估的结果就太不可信了,偏差大。
我们用的比较多的就是sklearn
里面的train_test_split
。
2、交叉验证法
“交叉验证法”就是先将数据集划分k个大小相似的互斥子集,同样所有子集都尽可能保持数据分布一致。每次利用k-1个子集作为训练集,剩下的一个作为测试集。这样我们可获得K组train/test,进行K次训练和测试,最终返回k个测试结果的均值。也称”k折交叉验证”
如图为10折交叉验证
我们可以利用sklearn
中的KFold
。
3、自助法
“自助法“是以自助采样法作为基础。
从m个样本的数据集D,随机采样(选)一个样本,拷贝入训练D’,放回,继续随机挑选,直至m次。
样本在m次采样中始终不被采样到的概率是,取极限得到:
实际评估的模型与期望评估的模型都使用m个训练样本,而仍有约1/3的没有在训练集的样本用于测试。
自助法在数据集较小、难以有效划分训练/测试集时很有用。在初始数据量足够时,留出法和交叉验证法更常用。