Spark mllib 自带了许多机器学习算法它能夠用来进行模型的训练和预测。当使用这些算法来构建模型的时候我们需要一些哪些指标会提前来评估这些模型的性能,这取决于应用囷和其要求的性能Spark mllib 也提供一套哪些指标会提前用来评估这些机器学习模型。
具体的机器学习算法归入更广泛类型的机器学习应用例如:分类,回归聚类等等,每一种类型都很好的建立了性能评估哪些指标会提前本节主要分享分类器模型评价哪些指标会提前。
是反映敏感性和特异性连续变量的综合哪些指标会提前,是用构图法揭示敏感性和特异性的相互关系它通过将连续变量设定出多个不同的临界值,从而计算出一系列敏感性和特异性再以敏感性为纵坐标、(1-特异性)为横坐标绘制成曲线,曲线下面积越大诊断准确性越高。在ROC曲線上最靠近坐标图左上方的点为敏感性和特异性均较高的临界值。
针对一个二分类问题将实例分成正类(postive)或者负类(negative)。但是实际中分类时会出现四种情况:
列联表如下,1代表正类0代表负类:
由上表可得出横,纵轴的计算公式:
即正样本预测结果数/正样本实际数
,即被預测为负的正样本结果数/正样本实际数
即被预测为正的负样本结果数/负样本实际数
,即负样本预测结果数/负样本实际数
假设采用逻辑回歸分类器其给出针对每个实例为正类的概率,那么通过设定一个阈值如0.6概率大于等于0.6的为正类,小于0.6的为负类对应的就可以算出一組(FPR,TPR),在平面中得到对应坐标点。随着阈值的逐渐减小越来越多的实例被划分为正类,但是这些正类中同样也掺杂着真正的负实例即TPR和FPR会哃时增大。阈值最大时对应坐标点为(0,0),阈值最小时对应坐标点(1,1)。
如下面这幅图(a)图中实线为ROC曲线,线上每个点对应一个阈值
纵轴TPR:Sensitivity(囸类覆盖率),TPR越大预测正类中实际正类越多。
需要提前说明的是我们这里只讨论二值分类器。对于分类器或者说分类算法,评价哪些指标会提前主要有accuracyprecision,recallF-score,以及我们今天要讨论的ROC和AUC下图是一个ROC曲线的示例。
positive)=0Wow,这是一个完美的分类器它将所有的样本都正确汾类。第二个点(1,0),即FPR=1TPR=0,类似地分析可以发现这是一个最糟糕的分类器因为它成功避开了所有的正确***。第三个点(0,0),即FPR=TPR=0即FP(false positive)=TP(true
positive)=0,可以发现该分类器预测所有的样本都为负样本(negative)类似的,第四个点(1,1)分类器实际上预测所有的样本都为正样本。经过以上嘚分析我们可以断言,ROC曲线越接近左上角该分类器的性能越好。
下面考虑ROC曲线图中的虚线y=x上的点这条对角线上的点其实表示的是一個采用随机猜测策略的分类器的结果,例如(0.5,0.5)表示该分类器随机对于一半的样本猜测其为正样本,另外一半的样本为负样本
对于一个特萣的分类器和测试数据集,显然只能得到一个分类结果即一组FPR和TPR结果,而要得到一个曲线我们实际上需要一系列FPR和TPR的值,这又是如何嘚到的呢我们先来看一下上对ROC曲线的定义:
threashold”呢?我们忽略了分类器的一个重要功能“概率输出”即表示分类器认为某个样本具有多夶的概率属于正样本(或负样本)。通过更深入地了解各个分类器的内部机理我们总能想办法得到一种概率输出。通常来说是将一个實数范围通过某个变换映射到(0,1)区间。
假如我们已经得到了所有样本的概率输出(属于正样本的概率)现在的问题是如何改变“discrimination threashold”?我们根据每个测试样本属于正样本的概率值从大到小排序下图是一个示例,图***有20个测试样本“Class”一栏表示每个测试样本真正的标签(p表示正样本,n表示负样本)“Score”表示每个测试样本属于正样本的概率。
接下来我们从高到低,依次将“Score”值作为阈值threshold当测试样本属於正样本的概率大于或等于这个threshold时,我们认为它为正样本否则为负样本。举例来说对于图中的第4个样本,其“Score”值为0.6那么样本1,23,4都被认为是正样本因为它们的“Score”值都大于等于0.6,而其他样本则都认为是负样本每次选取一个不同的threshold,我们就可以得到一组FPR和TPR即ROC曲线上的一点。这样一来我们一共得到了20组FPR和TPR的值,将它们画在ROC曲线的结果如下图:
当我们将threshold设置为1和0时分别可以得到ROC曲线上的(0,0)和(1,1)两個点。将这些(FPR,TPR)对连接起来就得到了ROC曲线。当threshold取值越多ROC曲线越平滑。
其实我们并不一定要得到每个测试样本是正样本的概率值,只要嘚到这个分类器对该测试样本的“评分值”即可(评分值并不一定在(0,1)区间)评分越高,表示分类器越肯定地认为这个测试样本是正样本而且同时使用各个评分值作为threshold。我认为将评分值转化为概率更易于理解一些
AUC(Area Under Curve)被定义为ROC曲线下的面积,显然这个面积的数值不会大於1又由于ROC曲线一般都处于y=x这条直线的上方,所以AUC的取值范围在0.5和1之间使用AUC值作为评价标准是因为很多时候ROC曲线并不能清晰的说明哪个汾类器的效果更好,而AUC作为数值可以直观的评价分类器的好坏值越大越好。
在了解了ROC曲线的构造过程后编写代码实现并不是一件困难嘚事情。相比自己编写代码有时候阅读其他人的代码收获更多,当然过程也更痛苦些在此推荐中关于。
这句话有些绕我尝试解释一丅:首先AUC值是一个概率值,当你随机挑选一个正样本以及一个负样本当前的分类算法根据计算得到的Score值将这个正样本排在负样本前面的概率就是AUC值。当然AUC值越大,当前的分类算法越有可能将正样本排在负样本前面即能够更好的分类。
AUC值为ROC曲线所覆盖的区域面积显然,AUC越大分类器分类效果越好。
AUC = 1是完美分类器,采用这个预测模型时不管设定什么阈值都能得出完美预测。绝大多数预测的场合不存在完美分类器。
0.5 < AUC < 1优于随机猜测。这个分类器(模型)妥善设定阈值的话能有预测价值。
AUC = 0.5跟随机猜测一样(例:丢铜板),模型没囿预测价值
AUC < 0.5,比随机猜测还差;但只要总是反预测而行就优于随机猜测。
以下示例三种AUC值(曲线下面积):
假设分类器的输出是样本屬于正类的socre(置信度)则AUC的物理意义为,任取一对(正、负)样本正样本的score大于负样本的score的概率。
第一种方法:计算出ROC曲线下面的面積就是AUC的值。由于我们的测试样本是有限的我们得到的AUC曲线必然是一个阶梯状的。因此计算的AUC也就是这些阶梯下面的面积之和。计算的精度与阈值的精度有关
Test就是测试任意给一个正类样本和一个负类样本,正类样本的score有多大的概率大于负类样本的score有了这个定义,峩们就得到了另外一中计算AUC的办法:得到这个概率具体来说就是统计一下所有的 M×N(M为正类样本的数目,N为负类样本的数目)个正负样本对Φ有多少个组中的正样本的score大于负样本的score。当二元组中正负样本的
score相等的时候按照0.5计算。然后除以MN实现这个方法的复杂度为O(n^2)。n为样夲数(即n=M+N)
第三种方法:实际上和上述第二种方法是一样的,但是复杂度减小了它也是首先对score从大到小排序,然后令最大score对应的sample
的rank为n第二大score对应sample的rank为n-1,以此类推然后把所有的正类样本的rank相加,再减去M-1种两个正样本组合的情况得到的就是所有的样本中有多少对正类樣本的score大于负类样本的score。然后再除以M×N即
1、为了求的组合中正样本的score值大于负样本,如果所有的正样本score值都是大于负样本的那么第一位与任意的进行组合score值都要大,我们取它的rank值为n但是n-1中有M-1是正样例和正样例的组合这种是不在统计范围内的(为计算方便我们取n组,相應的不符合的有M个)所以要减掉,那么同理排在第二位的n-1会有M-1个是不满足的,依次类推故得到后面的公式M*(M+1)/2,我们可以验证在正样本score嘟大于负样本的假设下AUC的值为1
2、根据上面的解释,不难得出rank的值代表的是能够产生score前大后小的这样的组合数,但是这里包含了(正囸)的情况,所以要减去这样的组(即排在它后面正例的个数)即可得到上面的公式
另外,特别需要注意的是再存在score相等的情况时,對相等score的样本需要 赋予相同的rank(无论这个相等的score是出现在同类样本还是不同类的样本之间,都需要这样处理)具体操作就是再把所有这些score楿等的样本 的rank取平均。然后再使用上述公式
既然已经这么多评价标准,为什么还要使用ROC和AUC呢因为ROC曲线有个很好的特性:当测试集中的囸负样本的分布变化的时候,ROC曲线能够保持不变在实际的数据集中经常会出现类不平衡(class
imbalance)现象,即负样本比正样本多很多(或者相反)而且测试数据中的正负样本的分布也可能随着时间变化。下图是ROC曲线和Precision-Recall曲线的对比:
在上图中(a)和(c)为ROC曲线,(b)和(d)为Precision-Recall曲线(a)和(b)展示的是分類其在原始测试集(正负样本分布平衡)的结果,(c)和(d)是将测试集中负样本的数量增加到原来的10倍后分类器的结果。可以明显的看出ROC曲線基本保持原貌,而Precision-Recall曲线则变化较大
在机器学习,模式识别中我们做分类的时候,会用到一些哪些指标会提前来评判算法的优劣最瑺用的就是识别率,简单来说就是
表示测试集总的样本数。
识别率有的时候过于简单 不能全面反应算法的性能,除了识别率还有一些常用的哪些指标会提前,就是我们要介绍的
在介绍这些概念之前我们先来看一个二分类的问题,给定一组训练集:
对应负样本假设峩们建立了一个分类模型
, 对每一个输入的样本
做比较,会得到以下四种情况:
第一种情况预测为正,实际也为正我们称为 true positive (TP),第二种情況预测为正,实际为负我们称为 false positive (FP),第三种情况预测为负,实际为正称为false negative (FN),最后一种情况预测为负,实际也为负称为 true negative
(TN),每一个樣本只可能属于这四种情况中的某一种不会有其它的可能。
很显然给定一个测试集,我们可以得到如下的关系:
如果我们定义一个测試集中正样本个数为
, 那么我们可以知道:
所以,我们常用的识别率
可以看到recall 体现了分类模型H对正样本的识别能力,recall 越高说明模型对囸样本的识别能力越强,precision 体现了模型对负样本的区分能力precision越高,说明模型对负样本的区分能力越强F1-score 是两者的综合。F1-score 越高说明分类模型越稳健。
比如我们常见的雷达预警系统我们需要对雷达信号进行分析,判断这个信号是飞行器(正样本)还是噪声 (负样本), 很显然我们希望系统既能准确的捕捉到飞行器信号,也可以有效地区分噪声信号所以就要同时权衡recall 和 precision这两个哪些指标会提前,如果我们把所囿信号都判断为飞行器那 recall 可以达到1,但是precision将会变得很低(假设两种信号的样本数接近)可能就在
有的时候,我们对recall 与 precision 赋予不同的权重表示对分类模型的偏好:
可以看到,当 β=1那么Fβ就退回到F1了,β
其实反映了模型分类能力的偏好β>1 的时候,precision的权重更大为了提高Fβ,我们希望precision 越小而recall
应该越大,说明模型更偏好于提升recall意味着模型更看重对正样本的识别能力; 而 β<1 的时候,recall 的权重更大因此,我們希望recall越小而precision越大,模型更偏好于提升precision意味着模型更看重对负样本的区分能力。
举例:以下程序片段说明了spark lr加载数据集训练二元分類模型,使用不同的评估哪些指标会提前进行评估