机器学习之性能度量指标

机器学习的模型性能度量指标

在机器学习中,衡量,评估和选择一个模型好坏是通过一些常见指标实现的,称之为性能指标(Metrics)。

对于一个二分类问题,我们首先给出如下基本指标基于这些指标可以推导出其他指标:

  • :True Positive(真正, TP),即模型预测为正的正样本个数(将正类预测为正类数)
  • :False Positive(假正, FP),即模型预测为正的负样本个数(本来是负样本,预测成了正样本,将负类预测为正类数   误报
  • :True Negative(真负 , TN),即模型预测为负的负样本个数(将负类预测为负类数)
  • :False Negative(假负 , FN),即模型预测为负的正样本个数(本来是正样本,预测成了负样本,将正类预测为负类数  漏报

从而有如下定义:

True Positive Rate(真正率 真阳性率 , TPR)或灵敏度(sensitivity) 
  TPR = TP /(TP + FN) 
  被预测为正的正样本结果数 / 正样本实际数(召回率)

True Negative Rate(真负率 真阴性率 , TNR)或特指度/特异性(specificity) 
  TNR = TN /(TN + FP) 
  被预测为负的负样本结果数 / 负样本实际数(负例的查全率/召回率)

False Positive Rate (假正率 假阴性率, FPR) 
  FPR = FP /(TN + FP) 
  被预测为正的负样本结果数 /负样本实际数

False Negative Rate(假负率 假阳性率 , FNR) 
  FNR = FN /(TP + FN) 
  被预测为负的正样本结果数 / 正样本实际数

è¿éåå¾çæè¿°

错误率(error rate)和准确率(精度,正确率 accuracy)

首先介绍几个常见的基本概念:

(1)一般来说,我们把学习器/分类器/模型的实际预测输出与样本真实输出之间的差异称之为误差(error)。

(2)学习器在训练集上的误差称之为训练误差(training error)或经验误差(empirical error)。

扫描二维码关注公众号,回复: 4553135 查看本文章

(3)训练学习结束后的模型在测试集上的误差称之为测试误差(testing error),其是对学习器的泛化误差的评估,是泛化误差的近似。

(4)在新样本上的误差称之为泛化误差(generalization error)。在新样本上的预测能力也称之为泛化性能过拟合,欠拟合)。

以下是常用的重要概念:

通常把分类错误的样本数占样本总数的比例称之为错误率(总体概念,不区分正负样本)

把把分类正确的样本数占样本总数的比例称之为准确率(也称之为精度,正确率,为了统一最好称之为准确度),准确率=1-错误率。计算如下:

注意Acc是一个总体概念,表示了一个分类器的分类能力。注意,这里的区分能力没有偏向于是正例还是负例,这也是Accuracy作为性能指标最大的问题所在。

精确率和召回率(查准率和查全率)

精确率(precision):,可理解为“真正属于类别C的/找到属于类别C的”。即实际是正类并且被预测为正类的样本占所有预测为正类的比例,精确率更为关注将负样本错分为正样本(FP)的情况,预测出的结果是否准确。

召回率(recall, sensitivity, true positive rate, TPR):,在医学上常常被称作敏感度(Sensitive)。可理解为“真正属于类别C的/所有属于类别C的”。即实际是正类并且被预测为正类的样本占所有实际为正类样本的比例,召回率更为关注覆盖率问题,是否将应该分类的正样本目标全部分类。

精确率是针对我们预测结果而言的,它表示的是预测为正的样本中有多少是对的。那么预测为正就有两种可能了,一种就是把正类预测为正类(TP),另一种就是把负类预测为正类(FP)。

召回率是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN)。

可见,精确率和召回率是相互影响的,理想情况下两者都高,但是一般情况下准确率高,召回率就低;召回率高,准确率就低;如果两者都低,应该是哪里算的有问题。

在信息检索领域,精确率和召回率又被称为查准率查全率

查准率=检索出的相关信息量 / 检索出的信息总量

查全率=检索出的相关信息量 / 系统中的相关信息总量

注意:一定要区分精确度和上一节中的准确率。在网络安全领域更注重漏报率和误报率,也就是精确率和召回率。在正负样本不平衡的情况下,准确率这个评价指标有很大的缺陷和片面性。比如在互联网广告里面,点击的数量是很少的,一般只有千分之几,如果用acc,即使全部预测成负类(不点击)acc 也有 99% 以上,没有意义。

F1 score

在精确率和召回率两者都要求高的情况下,综合衡量P和R就用F1值。F1是精确率和召回率的调和均值,精确率和准确率都高的情况下,值也会高。

F1 Score:F1 Score = 2*P*R/(P+R),其中P和R分别为 precision 和recall。

有的时候,我们对recall 与 precision 赋予不同的权重,表示对分类模型的查准率/查全率的不同偏好:综合评价指标F-measure。

Precision和Recall指标有时候会出现的矛盾的情况,这样就需要综合考虑他们,最常见的方法就是F-Measure(又称为F-Score)。F-Measure是Precision和Recall加权调和平均:

其中β>0度量了查全率对查准率的相对重要性。可以看到β为1时,该公式就是F1值(F1 score)。 反映了模型分类能力的偏好,β>1时查全率有更大影响;β<1时查准率有更大影响。 β越大的时候,precision的权重更大,我们希望precision 越小,而recall 应该越大,说明模型更偏好于提升recall,意味着模型更看重对正样本的识别能力; 而 β小的时候,recall 的权重更大,因此我们希望recall越小,而precision越大,模型更偏好于提升precision,意味着模型更看重对负样本的区分能力。

在一些应用中,对查准率和查重率的重视程度不同。例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确是用户感兴趣的,此时查准率更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要。此时可以通过调节β参数来实现。

F1度量平衡了precision和negative,是调和平均,而Fβ则是加权调和平均。与算术平均和几何平均相比,调和平均更重视较小值。原因是调和平均会在P和R相差较大时偏向较小的值,是最后的结果偏差,比较符合人的主观感受。

一般多个模型假设进行比较时,F1 score越高,说明它越好。很多推荐系统的评测指标就是用F1值的。

P-R图

我们希望模型预测结果Precision越高越好,同时Recall也越高越好,但事实上这两者在某些情况下有矛盾的。比如极端情况下,我们只预测出了一个正样本的结果,且是准确的,那么Precision就是100%,但是Recall就很低;而如果我们把所有结果都返回,那么比如Recall是100%,但是Precision就会很低。因此在不同的场合中需要自己判断希望Precision比较高或是Recall比较高。如果是做实验研究,可以绘制Precision-Recall曲线来帮助分析。

可以根据学习器的预测结果对样例进行排序,排在前面的是学习器认为最有可能是正例的样本,排在最后的则是学习器认为最不可能是正例的样本。按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率和查准率。以查全准为纵轴,查全率为横轴作图,得到P-R曲线,显示该曲线的图称为P-R图。

å¾2

现实任务中P-R曲线常是非单调,不平滑的,在很多局部有上下波动。

P-R图直观的显示出学习器在样本总体上的查全率和查准率,在进行比较时,若一个学习器的PR曲线被另一个学习器的PR曲线完全包住,则可以断言后者的性能优于前者(如图中A优于C)。如果两个学习器发生了交叉,则难以断言孰优孰劣,只能在具体的查准率或查全率条件下进行比较(如图中A和B)。如果一定要比较A和B孰优孰劣,一个合理的比较依据是比较PR曲线下面积的大小。在一定程度上表征了学习器在查准率和查全率上取得“双高”的比例,但这个值不太容易估算。所以设计了一些综合考虑查准率和查全率的性能度量。比如“平衡点”(Break-Even Point,REP),是“查准率=查全率”时的取值。例如学习器C的BEP是0.64,,基于BEP比较,可认为学习器A优于B。但是BEP较简单。上述的F1则更准确。

混淆矩阵

混淆矩阵实际上就是上述TP FP TN FN的组合:

ROC和AUC

ROC定义

In signal detection theory, a receiver operating characteristic (ROC), or simply ROC curve, is a graphical plot which illustrates the performance of a binary classifier system as its discrimination threshold is varied.

在很多学习器中,比如逻辑回归,朴素贝叶斯等。模型为预测样本给出的是一个实值或概率预测值,然后将这个预测值与一个分阈值(threshold)进行比较。若大于阈值则分为正类,小于阈值分为负类。例如,神经网络在一般情况下对每一个预测样本预测出一个[0.0, 1.0]之间的实值,然后将这个值与0.5比较,大于0.5则判为正例,否则为负例。这个实值或概率预测结果的好坏,直接决定了学习器的泛化能力。实际上,根据这个实值或概率预测结果,我们可将测试样本进行排序,“最有可能”是正例的排到最前面,反之排到最后面。这样,分类过程就相当于在这个排序中以某个“截断点”(cut point)将样本分为两个部分,前一个部分判作正例,后一个部分则判作反例

在不同的应用任务中,我们可根据任务需求来采用不同的截断点,例如若我们更重视“查准率”,则可选择排序靠前的位置进行截断;若更重视“查全率”,则选择靠后的位置进行截断。因此,排序本身的质量好坏,体现了综合考虑学习器在不同的任务下的“期望泛化性能”的好坏。ROC曲线是从这个角度出发研究学习器泛化性能的有力武器。如果我们减小这个阀值,那么更多的样本会被识别为正类。这会提高正类的识别率,但同时也会使得更多的负类被错误识别为正类。为了形象化这一变化,在此引入 ROC ,ROC 曲线可以用于评价一个分类器泛化性能好坏

ROC绘制

ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线。与上一节介绍的P-R曲线相似,我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横纵坐标作图,就得到了“ROC曲线”。与P-R曲线使用查准率、查全率为纵、横轴不同,ROC曲线的纵轴是“真正例率”(TPR)横轴是“假正例率”(FPR)。显示ROC曲线的图称为“ROC图”。对角线对应于随机猜测模型。TPR 代表能将正例分对的概率,FPR 代表将负例错分为正例的概率。在 ROC 空间中,每个点的横坐标是 FPR,纵坐标是 TPR,这也就描绘了分类器在 TP(真正率)和 FP(假正率)间的 trade-off(与P-R曲线不同,FPR和TPR是正比关系,相互促进)。左下角的点所对应的是将所有样例判为反例的情况,而右上角的点对应的则是将所有样例判断为正例的情况。为了画出ROC曲线,分类器必须提供每个样例被判为阳性或者阴性的可信程度值。(注意是概率值,可信程度y_pred_proba,而不是lable,y_pred)

  • 点(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图,此时仅能获得有限个(tpr, fpr)坐标对,无法产生平滑的ROC曲线。

AUC定义

AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大于1。

The AUC value is equivalent to the probability that a randomly chosen positive example is ranked higher than a randomly chosen negative example.

翻译过来就是随机挑选一个正样本以及一个负样本,分类器判定正样本的值高于负样本的概率就是 AUC 值。AUC给出的是分类器的平均性能值,完美分类器的AUC为1.0,随机猜测的AUC为0.5。AUC输出的是该模型对随机抽取的一个正样本和一个负样本,模型输出正样本的概率大于负样本的概率有多大,所以AUC反映更多的是模型的排序能力,将类别为1 的样本的概率排在类别为0的样本的前面的概率。与阈值无关,只和模型有关。

简单说:AUC值越大的分类器,正确率越高。

  • AUC = 1:完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。
  • 0.5<AUC<1:优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。
  • AUC=0.5:跟随机猜测一样(例:丢硬币,50%猜测概率),模型没有预测价值。
  • AUC<0.5:比随机猜测还差;但只要总是反预测而行,就优于随机猜测,因此不存在AUC<0.5的情况。

AUC计算方法:

第一种方法:AUC为ROC曲线下的面积,那我们直接计算面积可得。面积为一个个小的梯形面积之和。计算的精度与阈值的精度有关。

第二种方法:根据AUC的物理意义,我们计算正样本score大于负样本的score的概率。取NM(N为正样本数,M为负样本数)个二元组,比较score,最后得到AUC。时间复杂度为O(NM)。

第三种方法:与第二种方法相似,直接计算正样本score大于负样本的概率。我们首先把所有样本按照score排序,依次用rank表示他们,如最大score的样本,rank=n(n=N+M),其次为n-1。那么对于正样本中rank最大的样本,rank_max,有M-1个其他正样本比他score小,那么就有(rank_max-1)-(M-1)个负样本比他score小。其次为(rank_second-1)-(M-2)。

总结

关于ROC曲线

  1)虚线所示直线随机分类时的ROC曲线,一般画到图中作为参照。

  2)对于一个完美的分类器,ROC曲线应该是从(0,0)到(0,1),然后横着连到(1,1)的折线。ROC曲线越接近左上角,分类效果越好。

  3)在进行学习器比较时,与PR图相似。若一个学习器ROC曲线被另一个学习器的ROC曲线包住,则可以断言后者的性能优于前者;若两个学习器的ROC曲线发生交叉,则难以一般性的断言两者孰优孰劣。此时只能依据AUC进行比较。

  4)理想情况下,TPR应该接近1,FPR应该接近0。ROC曲线上的每一个点对应于一个threshold,对于一个分类器,每个threshold下会有一个TPR和FPR。比如Threshold最大时,TP=FP=0,对应于原点;Threshold最小时,TN=FN=1,对应于右上角的点(1,1)。

  5) P和N得分不作为特征间距离d的一个函数,随着阈值theta增加,TP和FP都增加。其实,我们并不一定要得到每个测试样本是正样本的概率值,只要得到这个分类器对该测试样本的“评分值”即可(评分值并不一定在(0,1)区间)。评分越高,表示分类器越肯定地认为这个测试样本是正样本,而且同时使用各个评分值作为threshold。将评分值转化为概率更易于理解一些。

关于AUC

  1)AUC表示曲线下面的面积,AUC的计算有两种方式,梯形法和ROC AUCH法,都是以逼近法求近似值

  2)对于一个完美的分类器,AUC的值应该为1,对于一个随机猜测分类器(即图中虚直线),AUC的面积为0.5。AUC的取值范围一般在0.5和1之间。使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个分类器的效果更好,而作为一个数值,对应AUC更大的分类器效果更好。AUC面积越大,分类效果越好。

  3)首先AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本,当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值。当然,AUC值越大,当前的分类算法越有可能将正样本排在负样本前面,即能够更好的分类。AUC考虑的是样本预测的排序质量。因此与排序误差有紧密关系。

既然已经这么多评价标准,为什么还要使用ROC和AUC呢?因为ROC曲线有个很好的特性:因为ROC曲线有个很好的特性:当测试集中的正负样本的分布变化的时候,ROC曲线能够保持不变。在实际的数据集中经常会出现类不平衡(class imbalance)现象,即负样本比正样本多很多(或者相反),而且测试数据中的正负样本的分布也可能随着时间变化。(与P-R曲线相比)。

  • Motivation1:在一个二分类模型中,对于所得到的连续结果,假设已确定一个阀值,比如说 0.6,大于这个值的实例划归为正类,小于这个值则划到负类中。如果减小阀值,减到0.5,固然能识别出更多的正类,也就是提高了识别出的正例占所有正例 的比类,即TPR,但同时也将更多的负实例当作了正实例,即提高了FPR。为了形象化这一变化,引入ROC,ROC曲线可以用于评价一个分类器。

  • Motivation2:在类不平衡的情况下,如正样本90个,负样本10个,直接把所有样本分类为正样本,得到识别率为90%。但这显然是没有意义的。单纯根据Precision和Recall来衡量算法的优劣已经不能表征这种病态问题

在上图中,(a)和(c)为Roc曲线,(b)和(d)为Precision-Recall曲线。

(a)和(b)展示的是分类其在原始测试集(正负样本分布平衡)的结果,(c)(d)是将测试集中负样本的数量增加到原来的10倍后,分类器的结果,可以明显的看出,ROC曲线基本保持原貌,而Precision-Recall曲线变化较大。

代价敏感错误率与代价曲线

不同的应用任务中我们的关注点通常不同,比如网络安全更关注误报,因为大量的IDS误报影响了网络安全管理员对安全事件的排查和检测;而医学更主要漏报。如果漏诊,产生的后果可想而知。某些服务应用则如果因为误报影响了正常用户的体验,则会大大影响服务的推广应用。不同类型的错误所造成的后果不同,为权衡不同类型错误所造成的的不同损失,可为错误赋予“非均等代价”(unequal cost)。如下图所示,正确判断的代价显然应该为0,错误判断的代价之间的比值会影响我们对学习器的改造。 

å¾4

以二分类为例,我们可以根据任务的领域知识设定一个“代价矩阵”(cost matrix),体现的是错误预测的代价。一般情况下我们更关注代价比值,而不是绝对值。之前的学习器默认都是假设均等代价。有了非均等代价概念之后,我们希望最小化的是总体代价,从而有代价敏感错误率(cost-sensitive)

在非均值代价下,ROC曲线不能直接反映出学习器的期望总体代价,而“代价曲线”(cost curve)则可以达到目的。围成的面积就是期望总体代价。

代价曲线的绘制: ROC曲线上每一点对应了代价平面上的一条线段,设ROC曲线上点的坐标为(FPR,TPR),则可相应计算出FNR,然后在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段。

å¾5

多分类性能指标

以上主要介绍的是分类,特别是二分类。对于多分类中我们可以用变形的某些上述指标去评估。

对于多分类问题,可以对每一类分别计算Precision、Recall和F1,综合作为模型评价指标。

  • 错误率和精度
  • 多分类任务,两两类别的组合产生多个二分类精确度和召回率
  • 多分类任务,每两两类别的组合产生多个二分类混淆矩阵
  • 基于n个二分类混淆矩阵上综合考虑查准率和查全率。如下。

(1)宏查准率(macro-P),宏查全率(macro-R),宏F1(macro-F1)

一种做法是先在各个混淆矩阵上分别计算出查准率和查全率,再计算平均值。

(2)微查准率(micro-P),微查全率(micro-R),微F1(micro-F1)

还可以将各个混淆矩阵的对应元素进行平均,再基于这些平均值计算出查准率,查全率,F1等。

聚类性能指标

聚类性能度量也称之为聚类“有效性指标”(validity index)。与监督学习的性能度量作用相似,对聚类结果,我们需要通过某种性能度量来评估其好坏;另一方面,若明确了最终将要使用的性能度量,则可以直接将其作为聚类过程的优化目标,从而更好地得到符合要求的聚类结果。

聚类是将样本集划分为若干个互不相交的子集,即样本簇。我们希望同一个簇的样本尽可能彼此相似,不同簇的样本尽可能不同。也就是聚类结果的“簇内相似度”(intra-cluster similarity)高,且“簇间相似度”(inter-cluster similarity)低。具体来看,聚类性能度量大致分为两类。一类是将聚类结果与某个“参考模型”(reference model)(例如将某个领域专家给出的划分结果作为参考模型)进行比较,称之为“外部指标”(external index);另一个类是直接考察聚类结果而不利用任何参考模型,称为“内部指标”(internal index)

定义多个集合:SS, SD, DS, DD.

基于集合导出了以下几个常用的聚类性能度量外部指标:

  • Jaccard系数(Jaccard Coeffcient, JC)
  • FM系数(Fowlkes and Mallows Index, FMI)
  • Rand系数(Rand Index, RI)

上述性能度量结果值均在[0, 1]区间,值越大越好。

再给出常用的聚类性能度量内部指标:

  • DB系数(Davies-Bouldin Index, DBI)
  • Dunn指数(Dunn Index, DI)

DBI值越小越好,而DI则相反,值越大越好。

以上摘抄自西瓜书,详细信息可参考此书。

回归性能指标

对于回归问题性能评估可能与上述不太一样了。我们可以表示误差e表示真实曲线和拟合曲线的差值:

由误差值导出如下四个指标:

 SAE (Sum of Absolute Error)

MAE (Mean Absolute Error):平均绝对误差,又被称为范数损失(l1-norm loss)。

SSE (Sum of Squared Error) 

MSE (Mean Squared Error) 其中均方误差最常用,其表示参数估计值与参数真实值之差的平方的期望值。同时还有均方根误差:

均方根误差 = 标准误差 = 均方误差^(1/2)

平均平方误差,又被称为  范数损失(l2-norm loss)。

具体定义如下:

代码实现

以上指标在sklearn库里基本都有现成的模块可以直接使用。相关API可查阅doc。可参考https://yq.aliyun.com/articles/623375

在用scikit-learn调用分类器进行分类的时候,模型返回的score值其实就是准确率。

注意事项

(1). 性能指标常常因为不可微分,无法作为优化的loss函数,因此采用如cross-entropy, rmse等“距离”可微函数作为优化目标,以期待在loss函数降低的时候,能够提高性能指标。而最终目标的性能指标则作为模型训练过程中,作为验证集做决定(early stoping或model selection)的主要依据,与训练结束后评估本次训练出的模型好坏的重要标准。在机器学习的比赛中,有部分比赛也是用metrics作为排名的依据(当然也有使用loss排名)。

(2). 实际中还需要考虑时间开销,存储开销和可解释性等问题。比如DDoS防御中实际上最困难的不是检测到DDoS攻击,而是准确的,高性能的检测DDoS流量,并进行清洗。而在学校里模拟DDoS环境中,我们很难模拟这两个指标:(1)高性能(时间和空间复杂度和有效性)(2)准确率,能否准确的检测出DDoS(主要是和业务流量区分,如果没有业务流量即背景流量,检测DDoS有点搞笑)

(3).医学,信息检索,web搜索引擎,网络安全等领域都有自己的专用术语,但都与传统的机器学习的名词概念有所重合,只是叫法不同。

还可以参考:https://cloud.tencent.com/developer/article/1097870

猜你喜欢

转载自blog.csdn.net/answer3lin/article/details/84800139