目录
一言以蔽之,所谓性能评估,简单来说就是运用一些数学方法去衡量模型/算法用在这个数据集上,到底好不好(泛化能力)。
通常我们在谈及机器学习算法性能评估时,指的往往是监督学习中的分类、回归算法的性能评估。这部分内容也是被疯狂讨论的,下面我将较为详细的描述各种性能评估指标。
从两方面入手,首先描述分类算法的性能评估,然后描述回归算法的性能评估。
学习分类 | 性能指标 |
分类 | Accuracy、Error rate、Precision、Recall、F1 Score、Fβ Score、P-R Curve、ROC Curve、AUC |
回归 | MAE、MSE、R2、MAPE |
切记切记:评估指标有很多很多很多,到底使用哪一个用于评估模型的性能,一定是要看具体的业务场景的,不同的业务场景使用的评估方法也不尽相同,甚至有可能使用多种评估方法来评估,甚至更有可能自创一个评估方法!先有决策需求,再有评估方案和指标!
分类模型评估指标
无论是二分类还是多分类任务,我们都会选择一类标签作为正样本(正例),其余所有样本作为负例;可以简单的认为,正例是我们更加关注的类别。比如说在医学疾病预测领域,我们往往会将“患病”这一标签记为正例。
精确率/错误率
它们是最简单的模型评估指标,精确率即预测正确的样本数量占样本总数量的比例。比如对于共有100个样本的测试集,有70个样本预测正确了,那么模型的精确度即为70%(0.7)。
言简意赅的说,错误率 = 1 - 精确度。
但是,这两个指标就像“人生无界”一样,有点泛泛而谈的味道,也就是不够精确,不够具体。在类别不平衡问题中,比如说正例有99个,负例有1个,模型很简单,简单到把全部的100个样本都预测为正例,那么精确率就是99%,显然这毫无意义,因为模型完全不具备识别负例的能力,所以我们需要一些更为复杂和精确的指标来评价模型的性能。
查准率/查全率
查准率又叫准确率,查全率又叫召回率。
说白了就是换了个计算方式而已,但是还是那句话,要看具体的业务场景。比如说一个很简单的二分类疾病预测案例,如果我们的目标是不遗漏任何一个病人,显然我们应该更加关注召回率;如果我们更加关注的是精确的诊断,那么显然我们应该更加关注查准率。
实验证明,在查全率和查准率之间存在着相反的相互依赖关系--如果提高输出的查全率,就会降低其查准率,反之亦然。为了提高Precision值,分类器需要尽量在“更有把握”时才把样本预测为正样本,但此时往往会因为过于保守而漏掉很多“没有把握”的正样本,导致Recall值降低。
混淆矩阵
把几个指标写在一起,就叫混淆矩阵!
利用sklearn.metrics.classification_report库可以很轻易的输出混淆矩阵的信息。
F1-score
F1-score是P和R的调和平均数,也就是一个计算公式,如下所示。
当P和R同等重要时,F1的值越大越好。从公式来看,F1-score更在意较小值,这意味着当P和R其中有一个较小时,会对F1产生更大的影响。对于很多实际的业务场景,P和R的重要性是不一样的!这个时候就需要用到下面这个指标。
Fβ Score
看起来更加酷炫的公式,其实只是在F1-score的基础之上,修改了一下P和R的权重而已,也就是增加了一个β参数。
从右边我们可以看出 ?
β = 1时,即为F1度量;
β > 1时,R会有更大的影响;
β < 1时,P会有更大的影响。
P-R 曲线
顾名思义,P-R曲线以查全率R为横轴,以查准率P为纵轴。对于一个确定的模型和一份确定的输入数据,其输出也是确定的,这份输出,也就是对于样本的预测一旦确定,我们假设正例也确定了,那么我们必然会得到唯一的一个确定的P和R,这在P-R曲线上也就是孤零零的一个点而已,曲线又是从何而来呢?
其实,诸多机器学习模型对于分类问题的输出,的确会直接告诉你模型对于样本的预测结果(二分类或多分类的类别),但这个结果是由概率得到的!模型真正输出的是对于样本分类结果的概率预测。比如说,模型输出预测样本点A的分类的结果:属于类别1的概率为0.7,属于类别2的概率为0.2,属于类别2的概率为0.1(总和要为1),那么最终结果就是样本A属于类别1。
对于一个拥有m个样本点的数据集(说测试集也行),我们会得到m个样本的正例概率预测。把最有可能是正样本的个体排在前面,而后面的则是模型认为最不可能为正例的样本,再按此顺序设置不同的阈值,逐个把样本作为正例进行预测并计算出当前的准确率和召回率得到的曲线。
这里所谓的阈值,什么意思呢?很简单,之前我们认为概率最高的类别就是模型预测的分类结果,但现在我们认为样本为正例的概率要大于0.9,才能判定为正例,0.9就是“阈值”;阈值的取值从大到小依次选取,当然你要是喜欢的话,从小到大选取也行。每取一个阈值,就会得到一个(R,P),也就是一个坐标点。所以我们一般可以取到m个阈值,也就是说阈值的选取就根据排序结果依次选取就行了。
注:当然,有的时候模型对于多个样本的正例预测概率相同,这个时候往往取不到m个阈值。
![](https://i-blog.csdnimg.cn/blog_migrate/0b9442ff2189a753c0b4a039a31ce3ca.png)
曲线下面的面积叫AP分数,其计算比较麻烦。
从图中可以明显的看出一个经验理论:一般来说,查准率和查全率是一对矛盾的度量,一个高的时候,另一个往往偏低。
说了半天这个图怎么画,怎么得到的,这个图到底有啥用呢?以及“平衡点”是干嘛的?
A、B、C这3个模型的性能是不一样的!我们可以用以下方法判断模型的性能:
基于曲线是否覆盖来判断 图中B完全包裹了C,所以B比C好,原因很简单,相同查全率下,B模型的查准率一定高于C;
基于平衡点来判断 平衡点即为P和R相同的点,该点的值越大,即认为模型越优(这样的判断过于简单);
用F1或Fβ来判断 如上文所述。
注:这里很难解释为什么要这样判断,所以直接上结论了。
ROC 曲线
ROC曲线又叫受试者工作特征曲线(receiver operating characteristic curve),源于军事领域,而后在医学领域应用甚广,“受试者工作 特征曲线”这一名称也正是来自于医学领域。 和P-R曲线相比,也就是横纵坐标不一样啦。ROC曲线关注以下两个指标:
True Positive Rate:TPR = TP / (TP+FN) = TP / P → 将正例分对占总正例的概率(真阳性率、灵敏度)
Fales Positive Rate: FPR = FP / (FP+TN) = FP / N → 将负例错分为正例占总负例的概率(假阳性率、特异度)
还是那个问题,怎么画呢?很简单,和P-R曲线一样的过程,在一个二分类(或多分类)模型中,对于所得到的连续结果,假设已确定一个阀值,比如说 0.6,大于这个值的实例划归为正类,小于这个值则划到负类中。如果减小阀值,减到0.5,固然能识别出更多的正类,也就是提高了识别出的正例占所有正例 的比类,即TPR,但同时也将更多的负实例当作了正实例,即提高了FPR。
在 ROC 曲线上,横坐标是 FPR,纵坐标是 TPR,描绘了分类器在 TP(真正率)和 FP(假正率)间的 trade-off。
![](https://i-blog.csdnimg.cn/blog_migrate/b216e21be3693aa4d0458397978dcbe1.png)
ROC曲线中的四个点和一条线:
- 点(0,1):即FPR=0, TPR=1,意味着FN=0且FP=0,将所有的样本都正确分类;
- 点(1,0):即FPR=1,TPR=0,最差分类器,避开了所有正确答案;
- 点(0,0):即FPR=TPR=0,FP=TP=0,分类器预测所有的样本都为负样本(negative);
- 点(1,1):分类器实际上预测所有的样本都为正样本。
这个曲线有什么用呢?
- ROC曲线越接近左上角,该分类器的性能越好,试验的准确性就越高。最靠近左上角的ROC曲线的点是错误最少的最好阈值,其假阳性和假阴性的总数最少。
- 对角线对应于随机猜想模型。
- 如果一个分类器A的ROC曲线被另一个分类器B的曲线完全包住,则可断言,B的性能较好。
- 如果曲线有交叉,则看AUC,面积大的更好。
AUC面积
AUC(Area Under Curve)被定义为ROC曲线下的面积,随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。显然这个面积的数值不会大于1。
总之,AUC值越大的分类器,正确率越高。
- AUC = 1:绝对完美分类器,理想状态下,100%完美识别正负类,不管阈值怎么设定都能得出完美预测,绝大多数预测不存在完美分类器;
- 0.5 < AUC < 1:优于随机猜测。这个分类器(模型)妥善设定阈值的话,可能有预测价值;
- AUC = 0.5:跟随机猜测一样(例:随机丢N次硬币,正反出现的概率为50%),模型没有预测价值;
- AUC < 0.5:比随机猜测还差;但只要总是反预测而行,就优于随机猜测,因此不存在AUC < 0.5的状况。
进阶理解:AUC可以衡量模型的排序能力。
对比accuracy、precision等指标,AUC指标本身和模型预测score绝对值无关,只关注排序效果,因此特别适合排序业务。
AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的score值将这个正样本排在负样本前面的概率就是AUC值。当然,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。换而言之,AUC就是从所有1样本中随机选取一个样本, 从所有0样本中随机选取一个样本,然后根据你的分类器对两个随机样本进行预测,把1样本预测为1的概率为p1,把0样本预测为1的概率为p0,p1>p0的概率就等于AUC。
例如0.7的AUC,其含义可以大概理解为:给定一个正样本和一个负样本,在70%的情况下,模型对正样本的打分高于对负样本的打分。可以看出在这个解释下,我们关心的只有正负样本之间的分数高低,而具体的分值则无关紧要。
AUC的计算。
简单的描述一下这个公式可以怎么得到:
(待补充)
化简一下很容易想到:
从公式上可以直观地看出,AUC的值衡量了模型的排序能力。
这里还有一个有趣的点,其实AUC的公式和gini系数室友关系的,它们满足
总结
P-R曲线和ROC曲线刻画的都是阈值对于分类性能的影响。通常一个分类器对样本的预测的结果是一个概率结果,比如0.7。但是样本是不是正类还需要和阈值相比较。
- 如果我们更重视查准率,则将阈值提升,比如为0.9。
- 如果我们更重视查全率,则将阈值下降,比如为0.5。
ROC曲线相比PR曲线有一个非常好的特性:当正负样本分布发生变化的时候,ROC曲线的形状能够基本保持不变。而PR曲线的形状会发生较剧烈的变化,下面将解释原因。
TPR = TP / (TP+FN) 和 FPR = FP / (FP+TN) ,从这两个公式中可以看出,如果负样本数量增加10倍,TPR几乎不受影响,而FPR的分子和分母会成比例的增加,最终FPR也不会有太大的变化,这是ROC曲线能够形状保持不变的原因;
再看P-R曲线,R = TP / (TP+FN) 和 P = TP / (TP+FP),负样本数量增加10倍,R几乎不受影响,而FP却可能有较大的变化,最终导致P-R曲线产生剧烈的变化。
因此对于样本类别不均衡的数据集,AUC面积更为常用。
回归模型评估指标
回归模型的评价指标就相对简单的多,下面一一看来。
MAE
平均绝对误差(Mean Absolute Error)
MAE数值大小本身没有意义,随着样本增加,MAE必然增加,也就是说,不同的数据集的情况下,MAE比较没有意义。并且,当数据中有离群点时,即使离群点数量不多,但也会对MAE产生很大的影响。
MSE
均方误差(Mean Squared Error)
MSE数值大小本身没有意义,随着样本增加,MSE必然增加,也就是说,不同的数据集的情况下,MSE比较没有意义。
RMSE
均方根误差(Root Mean Squard Error)
缺点同MAE和MSE一样。
注:很容易的就发现,这3个评价指标很像损失函数。
参考:《百面-机器学习》P43
R2
决定系数(coefficient of determination)
分母理解为原始数据的离散程度,分子为预测数据和原始数据的误差,二者相除可以消除原始数据离散程度的影响。越接近1,表明方程的变量对y的解释能力越强,这个模型对数据拟合的也较好;越接近0,表明模型拟合的越差;经验值:>0.4, 拟合效果好。
但是要注意,数据集的样本越大,R²越大,因此,不同数据集的模型结果比较会有一定的误差。
MAPE
MAPE不仅仅考虑预测值与真实值的误差,还考虑了误差与真实值之间的比例,相比RMSE,MAPE相当于把每个点的误差进行了归一化,降低了个别离群点带来 的绝对误差的影响。
在某些场景下,比如房价从0.5w到5w之间,0.5预测成1.0与5.0预测成4.5的差距是非常大的,在一些竞赛当中,MAPE也是常用的目标函数之一。
参考博客
https://blog.csdn.net/h2008066215019910120/article/details/17240715
https://blog.csdn.net/Orange_Spotty_Cat/article/details/80520839
https://blog.csdn.net/batuwuhanpei/article/details/51884351
https://blog.csdn.net/uncle_lin/article/details/52083181
http://alexkong.net/2013/06/introduction-to-auc-and-roc/
https://www.jianshu.com/p/b960305718f1