模型的评估:性能量度

对学习器的泛化能力的评估需要一套标准,也就是性能量度(performance measure)。使用不同的性能量度往往会导致不同的评判结果,所以模型的好坏是相对的。所以什么样的模型是好的不仅取决于算法和数据,还取决于任务需求。不要以为的掉进更复杂更难的模型就一定更好的陷阱。

回到模型评估

回归任务

回归任务中,我们要预测一个连续的值,最常见的就是“均方误差”(MSE)
模型的评估:性能量度

分类任务

1、正确率、错误率、 查准率、查全率

分类任务中,我们需要预测的是离散值,主要用到的几种数据:

True Positives(TP):实际为正例且被分类器分为正例的个数
False Positives(FP):实际为负例且被分类器分为正例的个数
False Negatives(FN):实际为正例且被分类器分为负例的个数
True Negatives(TN):实际为负例且被分类器分为负例的个数
TP + FN = P:实际的正例个数
FP + TN = N:实际的负例个数
模型的评估:性能量度

正确率(accuracy):

  • accuracy = (TP + TN)/(P + N)
    看上去有点绕,其实非常简单就是:分类正确的个数 / 总的样本数

错误率(error rate):

  • error_rate = (FP + FN)/(P + N) = 1 - accuracy
    分类错误的个数除以总的样本数

查准率/精度(precision):

  • precision = TP/(TP + FP)
    正确分为正例的个数除以正确分为正例和错误分为正例的个数之和
    预测出正例的有多少正确的

查全率/召回率(recall):

  • recall = TP/(TP + FN) = TP/P
    正确分为正例的个数除以正例的总数,也称之为灵敏度(sensitive)
    预测正确的正例占总正例的比例

一般情况下,在一定正确率前提下,要求分类器的召回率尽量高。

模型的评估:性能量度

2、P-R曲线

P-R曲线就是:查准率(precision)/ 查全率(recall)的曲线

根据模型的预测结果(一般可能会是概率)进行排序,将最可能的正样本排在前面,将最不可能的正样本排在后面,按此顺序逐个设定阈值,大于阈值的为正样本,每次计算出当前的P值和R值,如图 。
模型的评估:性能量度
多个模型的P-R曲线的评估遵循:若B包裹住了C,则B优于C。若两条线出现交叉,则根据平衡点(P=R)判断,越高,性能越好。

3、F1

P-R值有时会出现矛盾的情况,这样就需要综合考虑他们两,最常见的就是F-Score
也就是P-R的调和平均。
模型的评估:性能量度

模型的评估:性能量度

4、ROC与AUC

对于模型的评估一般都是设定一个阈值,大于阈值的为正样本,小于的为负样本。通常在模型训练出来的值若是按概率进行排序的话([0,1]之间),我们通常会选择0.5作为最初的阈值,其他的与之进行比较。

分类过程就是在一个排序中找到一个“截断点”(cut point)将样本一分为二。

根据不同的任务我们会采取不同的策略。像是如果我们的任务更重视“查准率”,那么我们的阈值(threshold)就需要选择较为靠前的位置。若是一个非常重视“查全率”的任务,像是对于传染疾病的筛查,我们就需要将阈值放在比较靠后一点的位置上。

ROC

所以ROC和P-R的原理之本是一样的,只不过用来比较的值有所不同。ROC用来比较的值是FPR,TPR。
模型的评估:性能量度
然后我们就会得到一个类似P-R的曲线。评估方式也和P-R曲线相同。
模型的评估:性能量度
ps.当阈值(threshold)取值越多,ROC曲线越平滑。

AUC

AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。

AUC到底是什么呢:首先AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值。当然,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。

为什么使用ROC曲线

ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。因为在实际应用中的数据集很多情况下都是不平衡的,正样本会远远大于负样本,疑惑反之。二P-R曲线在面对不平衡的的数据集时的表现就不啊太好。
模型的评估:性能量度
在上图中,(a)和( c)为ROC曲线,(b)和(d)为Precision-Recall曲线。(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,( c)和(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果。可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线则变化较大。

不用担心这些自己要怎么算,怎么找出最好的阈值。R/Python中都有套件,可以帮我们计算不同阈值的得分,然后标出最高分的阈值的值。


引用连接:

(Fawcett, 2006),Fawcett, T. (2006). An introduction to ROC analysis. Pattern recognition letters, 27(8), 861-874.
https://my.oschina.net/liangtee/blog/340317
https://blog.csdn.net/fzp95/article/details/86491014
周志华《机器学习》