机器学习常用评估指标的前世今生

 在机器学习中,性能指标(Metrics)是衡量一个模型好坏的关键,通过衡量模型输出y_predict和y_true之间的某种“距离”得出的。   性能指标往往使我们做模型时的最终目标,如准确率,召回率,敏感度等等,但是性能指标常常因为不可微分,无法作为优化的loss函数,因此采用如cross-entropy,rmse等“距离”可微函数作为优化目标,以期待在loss函数降低的时候,能够提高性能指标。而最终目标的性能指标则作为模型训练过程中,作为验证集做决定(early stoping或model selection)的主要依据,与训练结束后评估本次训练出的模型好坏的重要标准。   在机器学习的比赛中,有部分比赛也是用metrics作为排名的依据(当然也有使用loss排名)。   在使用机器学习算法的过程中,针对不同的场景需要不同的评价指标,常用的机器学习算法包括分类,回归,聚类等几大类型,在这里对常用的指标进行一个简单的总结,小编总结了前人的很多博客,知乎等,方便自己学习。当然,需要的同学们也可以看一下。 一,分类   分类是机器学习中的一类重要问题,很多重要的算法都在解决分类问题,例如决策树,支持向量机等,其中二分类问题是分类问题中的一个重要的课题。   常见的分类模型包括:逻辑回归、决策树、朴素贝叶斯、SVM、神经网络等,模型评估指标包括以下几种: 1. TPR、FPR&TNR(混淆矩阵)   在二分类问题中,即将实例分成正类(positive)或负类(negative)。对一个二分问题来说,会出现四种情况。如果一个实例是正类并且也被 预测成正类,即为真正类(True positive),如果实例是负类被预测成正类,称之为假正类(False positive)。相应地,如果实例是负类被预测成负类,称之为真负类(True negative),正类被预测成负类则为假负类(false negative)。   TP(True positive):正确肯定的数目;   FN(False positive):漏报,没有正确找到的匹配的数目;   FP(True negative):误报,给出的匹配是不正确的;   TN(false negative):正确拒绝的非匹配对数; 在评估一个二分类模型的效果时,我们通常会用一个称为混淆矩阵(confusion matrix)的四格表来表示,即如下表所示,1代表正类,0代表负类: 预测1 预测0 实际1 True Positive(TP) False Negative(FN) 实际0 False Positive(FP) True Negative(TN)   从列联表引入两个新名词。其一是真正类率(true positive rate ,TPR), 计算公式为 TPR = TP / (TP + FN)   刻画的是分类器所识别出的 正实例占所有正实例的比例。   另外一个是负正类率(false positive rate, FPR),计算公式为 FPR = FP / (FP + TN)   计算的是分类器错认为正类的负实例占所有负实例的比例。   还有一个真负类率(True Negative Rate,TNR),也称为specificity,计算公式为 TNR = TN /(FP + TN) = 1 - FPR 2.常用于二分类问题(监督学习)的度量指标 精确率Precision、召回率Recall和F1值   精确率(正确率)和召回率是广泛用于信息检索和统计学分类领域的两个度量值,用来评价结果的质量。其中精度是检索出相关文档数与检索出的文档总数的比率,衡量的是检索系统的查准率;召回率是指检索出的相关文档数和文档库中所有的相关文档数的比率,衡量的是检索系统的查全率。   一般来说,Precision就是检索出来的条目(比如:文档、网页等)有多少是准确的,Recall就是所有准确的条目有多少被检索出来了,两者的定义分别如下: Precision = 提取出的正确信息条数 / 提取出的信息条数 Recall = 提取出的正确信息条数 / 样本中的信息条数   为了能够评价不同算法的优劣,在Precision和Recall的基础上提出了F1值的概念,来对Precision和Recall进行整体评价。F1的定义如下: F1值 = 正确率 * 召回率 * 2 / (正确率 + 召回率)   不妨举这样一个例子:   某池塘有1400条鲤鱼,300只虾,300只鳖。现在以捕鲤鱼为目的。撒一大网,逮着了700条鲤鱼,200只虾,100只鳖。那么,这些指标分别如下:   正确率 = 700 / (700 + 200 + 100) = 70%   召回率 = 700 / 1400 = 50%   F1值 = 70% * 50% * 2 / (70% + 50%) = 58.3%   不妨看看如果把池子里的所有的鲤鱼、虾和鳖都一网打尽,这些指标又有何变化:   正确率 = 1400 / (1400 + 300 + 300) = 70%   召回率 = 1400 / 1400 = 100%   F1值 = 70% * 100% * 2 / (70% + 100%) = 82.35%   由此可见,正确率是评估捕获的成果中目标成果所占得比例;召回率,顾名思义,就是从关注领域中,召回目标类别的比例;而F值,则是综合这二者指标的评估指标,用于综合反映整体的指标。   当然希望检索结果Precision越高越好,同时Recall也越高越好,但事实上这两者在某些情况下有矛盾的。比如极端情况下,我们只搜索出了一个结果,且是准确的,那么Precision就是100%,但是Recall就很低;而如果我们把所有结果都返回,那么比如Recall是100%,但是Precision就会很低。因此在不同的场合中需要自己判断希望Precision比较高或是Recall比较高。如果是做实验研究,可以绘制Precision-Recall曲线来帮助分析。 3. 综合评价指标F-measure   Precision和Recall指标有时候会出现的矛盾的情况,这样就需要综合考虑他们,最常见的方法就是F-Measure(又称为F-Score)。   F-Measure是Precision和Recall加权调和平均:   当参数α=1时,就是最常见的F1。因此,F1综合了P和R的结果,当F1较高时则能说明试验方法比较有效。 4. 应用场景:   准确率和召回率是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下准确率高、召回率就低,召回率低、准确率高,当然如果两者都低,那是什么地方出问题了。当精确率和召回率都高时,F1的值也会高。在两者都要求高的情况下,可以用F1来衡量。 地震的预测 对于地震的预测,我们希望的是RECALL非常高,也就是说每次地震我们都希望预测出来。这个时候我们可以牺牲PRECISION。情愿发出1000次警报,把10次地震都预测正确了;也不要预测100次对了8次漏了两次。 嫌疑人定罪 基于不错怪一个好人的原则,对于嫌疑人的定罪我们希望是非常准确的。及时有时候放过了一些罪犯(recall低),但也是值得的。 5. ROC曲线和AUC   AUC是一种模型分类指标,且仅仅是二分类模型的评价指标。AUC是Area Under Curve的简称,那么Curve就是ROC(Receiver Operating Characteristic),翻译为"接受者操作特性曲线"。也就是说ROC是一条曲线,AUC是一个面积值。   ROC曲线应该尽量偏离参考线,越靠近左上越好   AUC:ROC曲线下面积,参考线面积为0.5,AUC应大于0.5,且偏离越多越好 5.1 为什么引入ROC曲线?   Motivation1:在一个二分类模型中,对于所得到的连续结果,假设已确定一个阀值,比如说 0.6,大于这个值的实例划归为正类,小于这个值则划到负类中。如果减小阀值,减到0.5,固然能识别出更多的正类,也就是提高了识别出的正例占所有正例 的比类,即TPR,但同时也将更多的负实例当作了正实例,即提高了FPR。为了形象化这一变化,引入ROC,ROC曲线可以用于评价一个分类器。   Motivation2:在类不平衡的情况下,如正样本90个,负样本10个,直接把所有样本分类为正样本,得到识别率为90%。但这显然是没有意义的。单纯根据Precision和Recall来衡量算法的优劣已经不能表征这种病态问题。 5.2 什么是ROC曲线?   ROC(Receiver Operating Characteristic)翻译为"接受者操作特性曲线"。曲线由两个变量1-specificity 和 Sensitivity绘制. 1-specificity=FPR,即负正类率。Sensitivity即是真正类率,TPR(True positive rate),反映了正类覆盖程度。这个组合以1-specificity对sensitivity,即是以代价(costs)对收益(benefits)。显然收益越高,代价越低,模型的性能就越好。 此外,ROC曲线还可以用来计算“均值平均精度”(mean average precision),这是当你通过改变阈值来选择最好的结果时所得到的平均精度(PPV)。 x 轴为假阳性率(FPR):在所有的负样本中,分类器预测错误的比例 FPR = \frac {FP}{FP+TN} \\ y 轴为真阳性率(TPR):在所有的正样本中,分类器预测正确的比例(等于Recall) TPR = \frac {TP}{TP+FN} \\   为了更好地理解ROC曲线,我们使用具体的实例来说明:   如在医学诊断中,判断有病的样本。那么尽量把有病的揪出来是主要任务,也就是第一个指标TPR,要越高越好。而把没病的样本误诊为有病的,也就是第二个指标FPR,要越低越好。   不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的第一个指标应该会很高,但是第二个指标也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么第一个指标达到1,第二个指标也为1。   我们以FPR为横轴,TPR为纵轴,得到如下ROC空间。   我们可以看出,左上角的点(TPR=1,FPR=0),为完美分类,也就是这个医生医术高明,诊断全对。点A(TPR>FPR),医生A的判断大体是正确的。中线上的点B(TPR=FPR),也就是医生B全都是蒙的,蒙对一半,蒙错一半;下半平面的点C(TPR
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信