zoukankan      html  css  js  c++  java
  • 机器学习--评估指标篇

    1. 回归(Regression)算法指标

    • Mean Absolute Error 平均绝对误差
    • Mean Squared Error 均方误差
    • Root Mean Squared Error:均方根误差
    • Coefficient of determination 决定系数

      以下为一元变量和二元变量的线性回归示意图:

      

     

       怎样来衡量回归模型的好坏呢? 我们第一眼自然而然会想到采用残差(实际值与预测值差值)的均值来衡量,即:

      问题 1:用残差的均值合理吗?

      当实际值分布在拟合曲线两侧时,对于不同样本而言 有正有负,相互抵消,因此我们想到采用预测值和真实值之间的距离来衡量。

     

    1.1 平均绝对误差 MAE

      平均绝对误差MAE(Mean Absolute Error)又被称为 L1范数损失。

      问题 2:MAE有哪些不足?

      MAE虽能较好衡量回归模型的好坏,但是绝对值的存在导致函数不光滑,在某些点上不能求导,可以考虑将绝对值改为残差的平方,这就是均方误差。

    1.2 均方误差 MSE

      均方误差MSE(Mean Squared Error)又被称为 L2范数损失 。

      问题 3: 还有没有比MSE更合理一些的指标?

      由于MSE与我们的目标变量的量纲不一致,为了保证量纲一致性,我们需要对MSE进行开方 。

    1.3 均方根误差 RMSE

      问题 4: RMSE有没有不足的地方?有没有规范化(无量纲化的指标)?

      上面的几种衡量标准的取值大小与具体的应用场景有关系,很难定义统一的规则来衡量模型的好坏。比如说利用机器学习算法预测上海的房价RMSE在2000元,我们是可以接受的,但是当四五线城市的房价RMSE为2000元,我们还可以接受吗?下面介绍的决定系数就是一个无量纲化的指标。

    1.4 决定系数 R^2

      变量之所以有价值,就是因为变量是变化的。什么意思呢?比如说一组因变量为[0, 0, 0, 0, 0],显然该因变量的结果是一个常数0,我们也没有必要建模对该因变量进行预测。假如一组的因变量为[1, 3, 7, 10, 12],该因变量是变化的,也就是有变异,因此需要通过建立回归模型进行预测。这里的变异可以理解为一组数据的方差不为0

      决定系数又称为R^2 score,反映因变量的全部变异能通过回归关系被自变量解释的比例。

      如果结果是0,就说明模型预测不能预测因变量。 如果结果是1。就说明是函数关系。 如果结果是0-1之间的数,就是我们模型的好坏程度。 化简上面的公式 ,分子就变成了我们的均方误差MSE,下面分母就变成了方差:

      问题 5: 以上评估指标有没有缺陷,如果有,该怎样改进?

      以上的评估指标是基于误差的均值对进行评估的,均值对异常点(outliers)较敏感,如果样本中有一些异常值出现,会对以上指标的值有较大影响,即均值是非鲁棒的。(和MSE类似)

    1.5 解决评估指标鲁棒性问题

      我们通常用一下两种方法解决评估指标的鲁棒性问题:

    • 剔除异常值。设定一个相对误差 ,当该值超过一定的阈值时,则认为其是一个异常点,剔除这个异常点,将异常点剔除之 后。再计算平均误差来对模型进行评价。
    • 使用误差的分位数来代替,如利用中位数来代替平均数。例如 MAPE:

      MAPE是一个相对误差的中位数,当然也可以使用别的分位数。

     

    2. 分类(Classification)算法指标

    • 精度 Accuracy
    • 混淆矩阵 Confusion Matrix
    • 准确率(查准率) Precision
    • 召回率(查全率)Recall
    • Fβ Score
    • AUC Area Under Curve
    • KS Kolmogorov-Smirnov

    2.1 精度 Acc

      预测正确的样本的占总样本的比例,取值范围为[0,1],取值越大,模型预测能力越好。

      其中:

      精度评价指标对平等对待每个类别,即每一个样本判对 (0) 和判错 (1) 的代价都是一样的。

      问题 6: 精度有什么缺陷?什么时候精度指标会失效?

    • 对于有倾向性的问题,往往不能用精度指标来衡量。比如,判断空中的飞行物是导弹还是其他飞行物,很显然为了减少损失,我们更倾向于相信是导弹而采用相应的防护措施。此时判断为导弹实际上是其他飞行物与判断为其他飞行物实际上是导弹这两种情况的重要性是不一样的;
    • 对于样本类别数量严重不均衡的情况,也不能用精度指标来衡量。比如银行客户样本中好客户990个,坏客户10个。如果一个模型直接把所有客户都判断为好客户,得到精度为99%,但这显然是没有意义的。

      对于以上两种情况,单纯根据Accuracy来衡量算法的优劣已经失效。这个时候就需要对目标变量的真实值和预测值做更深入的分析。

    2.2 混淆矩阵 Confusion Matrix

      这里牵扯到三个方面:真实值,预测值,预测值和真实值之间的关系,其中任意两个方面都可以确定第三个。

      通常取预测值和真实值之间的关系、预测值对矩阵进行划分:

    • True positive (TP) :真实值为Positive,预测正确(预测值为Positive)
    • True negative (TN):真实值为Negative,预测正确(预测值为Negative)
    • False positive (FP):真实值为Negative,预测错误(预测值为Positive),第一类错误, Type I error。
    • False negative (FN):真实值为Positive,预测错误(预测值为 Negative),第二类错误, Type II error。

     

    2.3 准确率(查准率) Precision

      Precision 是分类器预测的正样本中预测正确的比例,取值范围为[0,1],取值越大,模型预测能力越好。Precision越高,获取的信息越正确,不过可能会遗漏一些信息。

    2.4 召回率(查全率)Recall

       Recall 是分类器所预测正确的正样本占所有正样本的比例,取值范围为[0,1],取值越大,模型预测能力越好。Recall越高,获取的正确信息越多,不过可能获取信息的准度下降。

    应用场景:

      1. 地震的预测 对于地震的预测,我们希望的是Recall非常高,也就是说每次地震我们都希望预测出来。这个时候我们可以牺 牲Precision。情愿发出1000次警报,把10次地震都预测正确了;也不要预测100次对了8次漏了两次。“宁错拿一万,不放过一个”,分类阈值较低。

      2. 嫌疑人定罪 基于不错怪一个好人的原则,对于嫌疑人的定罪我们希望是非常准确的。即使有时候放过了一些罪犯,但也是值得的。因此我们希望有较高的Precision值,可以合理地牺牲Recall。“宁放过一万,不错拿一个”,“疑罪从无”,分类阈值较高。

     

    问题 7: 某一家互联网金融公司风控部门的主要工作是利用机器模型抓取坏客户。互联网金融公司要扩大业务量,尽量多的吸引好客户,此时风控部门该怎样调整Recall和Precision?如果公司坏账扩大,公司缩紧业务,尽可能抓住更多的坏客户,此时风控部门该怎样调整Recall和Precision?

      如果互联网公司要扩大业务量,为了减少好客户的误抓率,保证吸引更多的好客户,风控部门就会提高阈值,从而提高模型的查准率Precision,同时,导致查全率Recall下降。如果公司要缩紧业务,尽可能抓住更多的坏客户,风控部门就会降低阈值,从而提高模型的查全率Recall,但是这样会导致一部分好客户误抓,从而降低模型的查准率 Precision。

      根据以上几个案,我们知道随着阈值的变化Recall和Precision往往会向着反方向变化,这种规律很难满足我们的期望,即Recall和Precision同时增大。

    问题 8: 有没有什么方法权衡Recall和Precision 的矛盾?

      我们可以用一个指标来统一Recall和Precision的矛盾,即利用Recall和Precision的加权调和平均值作为衡量标准。

    2.5 Fβ Score

      Precision和Recall 是互相影响的,理想情况下肯定是做到两者都高,但是一般情况下Precision高、Recall 就低, Recall 高、Precision就低。为了均衡两个指标,我们可以采用Precision和Recall的加权调和平均(weighted harmonic mean)来衡量,即Fβ Score,公式如下:

       β表示权重:

      通俗的语言就是:β 越大,Recall的权重越大, 越小,Precision的权重越大。由于Fβ Score 无法直观反映数据的情况,同时业务含义相对较弱,实际工作用到的不多。

    2.6 ROC 和 AUC

      AUC是一种模型分类指标,且仅仅是二分类模型的评价指标。AUC是Area Under Curve的简称,其中Curve就是 ROC(Receiver Operating Characteristic),翻译为"接受者操作特性曲线"。也就是说ROC是一条曲线,AUC是一个曲线下的面积值。假设有一个分类器,并且改分类器可以将器可以得到将一个样本预测为正的概率,并将此概率称为这个样本的得分。AUC的含义为:随机给定一个正样本和一个负样本,用一个分类器进行分类和预测,该正样本的得分比该负样本的得分要大的概率  

    2.6.1 ROC 

      ROC曲线为 FPR 与 TPR 之间的关系曲线,这个组合以 FPR 对 TPR,即是以代价 (costs) 对收益 (benefits),显然收益越高,代价越低,模型的性能就越好。

    • x 轴为假阳性率(FPR):在所有的负样本中,分类器预测错误的比例(FP为预测错误的正样本,也就是说实际为负样本),可以简单理解为负样本误分为正样本的概率:

    • y 轴为真阳性率(TPR):在所有的正样本中,分类器预测正确的比例(等于Recall),可以简单理解为正样本被发掘的比例:

      为了更好地理解ROC曲线,我们使用具体的实例来说明:

      如在医学诊断的主要任务是尽量把生病的人群都找出来,也就是TPR越高越好。而尽量降低没病误诊为有病的人数,也就是FPR越低越好。

      不难发现,这两个指标之间是相互制约的。如果某个医生对于有病的症状比较敏感,稍微的小症状都判断为有病,那么他的TPR应该会很高,但是FPR也就相应地变高。最极端的情况下,他把所有的样本都看做有病,那么TPR达到1,FPR也为1。我们以FPR为横轴,TPR为纵轴,得到如下ROC空间

      我们可以看出,左上角的点(TPR=1,FPR=0),为完美分类,也就是这个医生医术高明,诊断全对。点A(TPR>FPR),医生A的判断大体是正确的。中线上的点B(TPR=FPR),也就是医生B全都是蒙的,蒙对一半,蒙错一半;下半平面的点C(TPR<FPR),这个医生说你有病,那么你很可能没有病,医生C的话我们要反着听,为真庸医。上图中一个阈值,得到一个点。现在我们需要一个独立于阈值的评价指标来衡量这个医生的医术如何,也就是遍历所有的阈值,得到 ROC 曲线。

      假设下图是某医生的诊断统计图,为未得病人群(上图)和得病人群(下图)的模型输出概率分布图(横坐标表示模型输出概率,纵坐标表示概率对应的人群的数量),显然未得病人群的概率值普遍低于得病人群的输出概率值(即正常人诊断出疾病的概率小于得病人群诊断出疾病的概率)。

      竖线代表阈值。显然,图中给出了某个阈值对应的混淆矩阵,通过改变不同的阈值 ,得到一系列的混淆矩阵,进而得到一系列的TPR和FPR,绘制出ROC曲线。

      阈值为1时,不管你什么症状,医生均未诊断出疾病(预测值都为N),此时 ,位于左下。阈值为 0 时,不管你什么症状,医生都诊断结果都是得病(预测值都为P),此时 ,位于右上。

     

     2.6.2 AUC

      AUC定义:

    • AUC 值为 ROC 曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。
    • AUC = 1,是完美分类器。
    • 0.5 < AUC < 1,优于随机猜测。有预测价值。
    • AUC = 0.5,跟随机猜测一样(例:丢铜板),没有预测价值。
    • AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

      注:对于AUC小于 0.5 的模型,我们可以考虑取反(模型预测为positive,那我们就取negtive),这样就可以保证模型的性能不可能比随机猜测差。

      以下为ROC曲线和AUC值的实例:

       AUC的物理意义:正样本的预测结果大于负样本的预测结果的概率。因此AUC反应的是分类器对样本的排序能力。另外值得注意的是,AUC对样本类别是否均衡并不敏感,这也是不均衡样本通常用AUC评价分类器性能的一个原因

      简单说明一下AUC的物理意义。首先是ROC曲线绘制方法,ROC曲线最直观的画法就是将所有样本按模型打分从高到低排序,然后将每一个样本定为阈值,算一个tpr,tnr出来做图。接下来举几个例子说明AUC值的物理含义。

      现在假设有一个训练好的二分类器对10个正负样本(正例5个,负例5个)预测,得分按高到低排序得到的最好预测结果为[1, 1, 1, 1, 1, 0, 0, 0, 0, 0],即5个正例均排在5个负例前面,正例排在负例前面的概率为100%。然后绘制其ROC曲线,由于是10个样本,除开原点我们需要描10个点,如下:

       描点方式按照样本预测结果的得分高低从左至右开始遍历(也就是从左边开始移动,在左边的预测为1,右边预测为0)。从原点开始,每遇到1便向y轴正方向移动y轴最小步长1个单位,这里是1/5=0.2;每遇到0则向x轴正方向移动x轴最小步长1个单位,这里也是0.2。不难看出,上图的AUC等于1,印证了正例排在负例前面的概率的确为100%。

      我们不妨再举个栗子,预测结果序列为[1, 1, 1, 1, 0, 1, 0, 0, 0, 0]。ROC曲线如下图:

      计算上图的AUC为0.96与计算正例排在负例前面的概率0.8 × 1 + 0.2 × 0.8 = 0.96相等,而左上角阴影部分的面积则是负例排在正例前面的概率0.2 × 0.2 = 0.04。

      再看个栗子,预测结果序列为[1, 1, 1, 0, 1, 0, 1, 0, 0, 0],ROC曲线如下图所示:

      

      计算上图的AUC为0.88与计算正例排在负例前面的概率0.6 × 1 + 0.2 × 0.8 + 0.2 × 0.6 = 0.88相等,左上角阴影部分的面积是负例排在正例前面的概率0.2 × 0.2 × 3 = 0.12。

      通过上述几个例子可以看出AUC反应的是分类器对样本的排序能力(正样本在前)。

      问题 13 :小明一家四口,小明5岁,姐姐10岁,爸爸35岁,妈妈33岁,建立一个逻辑回归分类器,来预测小明家人为成年人概率。

      以下为三种模型的输出结果,求三种模型的 AUC :

    1. AUC更多的是关注对计算概率的排序,关注的是概率值的相对大小,与阈值和概率值的绝对大小没有关系 例子中并不关注小明是不是成人,而关注的是,预测为成人的概率的排序。
    2. AUC只关注正负样本之间的排序,并不关心正样本内部,或者负样本内部的排序。这也体现了AUC的本质: 任意个正样本的概率都大于负样本的概率的能力。

      例子中AUC只需要保证(小明和姐姐)(爸爸和妈妈),小明和姐姐在前2个排序,爸爸和妈妈在后2个排序,而不会考虑小明和姐姐谁在前,或者爸爸和妈妈谁在前 。AUC只与概率的相对大小(概率排序)有关,和绝对大小没关系。由于三个模型概率排序的前两位都是未成年人(小明,姐姐),后两位都是成年人(妈妈,爸爸),因此三个模型的AUC都等于1。

      问题 14:以下已经对分类器输出概率从小到大进行了排列,哪些情况的AUC等于1, 情况的AUC为0(其中背景色表示True value,红色表示成年人,蓝色表示未成年人)。

       D 模型, E模型和F模型的AUC值为1,C 模型的AUC值为0(爸妈为成年人的概率小于小明和姐姐,显然这个模型预测反了)。

    AUC的计算

    • 法1:AUC为ROC曲线下的面积,那我们直接计算面积可得。面积为一个个小的梯形面积(曲线)之和。计算的精度与阈值的精度有关 。
    • 法2:根据AUC的物理意义,我们计算正样本预测结果大于负样本预测结果的概率。取n1* n0(n1为正样本数,n0为负样本数)个二元组,每个二元组比较正样本和负样本的预测结果,正样本预测结果高于负样本预测结果则为预测正确,预测正确的二元组占总二元组的比率就是最后得到的AUC。时间复杂度为O(N* M)。
    • 法3:我们首先把所有样本按照score排序,依次用rank表示他们,如最大score的样本,$rank=n$ ( $n=n0+n1$,其中n0为负样本个数,n1为正样本个数),其次为n-1。那么对于正样本中rank最大的样本,rank_max,有n1-1个其他正样本比他score小,那么就有$(rank_max-1)-(n1-1)$个负样本比他score小。其次为$(rank_second-1)-(n1-2)$。最后我们得到正样本大于负样本的概率为 :

      下面有一个简单的例子:

      真实标签为 (1, 0, 0, 1, 0) 预测结果1(0.9, 0.3, 0.2, 0.7, 0.5)、预测结果2(0.9, 0.3, 0.2, 0.7, 0.8)分别对两个预测结果进行排序,并提取他们的序号,结果1 (5, 2, 1, 4, 3)、结果2:(5, 2, 1, 3, 4)对正分类序号累加。结果1:SUM正样本$(rank(score))=5+4=9$ ; 结果2: SUM正样本$(rank(score))=5+3=8$。计算两个结果的AUC: 结果1:$AUC= (9-2*3/2)/6=1$; 结果2:$AUC= (8-2*3/2)/6=0.833$

      

      问题 15:为什么说 ROC 和AUC都能应用于非均衡的分类问题?

      ROC曲线只与横坐标 (FPR) 和 纵坐标 (TPR) 有关系 。我们可以发现TPR只是正样本中预测正确的概率,而FPR只是负样本中预测错误的概率,和正负样本的比例没有关系。因此 ROC 的值与实际的正负样本比例无关,因此既可以用于均衡问题,也可以用于非均衡问题。而 AUC 的几何意义为ROC曲线下的面积,因此也和实际的正负样本比例无关。

      ROC曲线的缺点:在类别不平衡的背景下,负例的数目众多致使FPR的增长不明显,导致ROC曲线呈现一个过分乐观的估计效果。ROC的曲线$x$轴采用的是FPR,当负例$N$的数量远远超过正例$p$的数量的时候,$fp$的大幅增长只能换来FPR的微小改变。也就是说虽然“大量”负例被误判为正例(这个大量是相对而言的),在ROC曲线上却无法直观的看出来。

      举个例子,假设一个数据集有正例20,负例10000,开始时有20个负例被错判, [公式] ,接着又有20个负例错判, [公式] ,在ROC曲线上这个变化是很细微的。而与此同时Precision则从原来的0.5下降到了0.33,在PR曲线上将会是一个大幅下降。

     

    2.7 PR(Precision Recall) 曲线

      PR曲线展示的是Precision vs Recall的曲线,PR曲线与ROC曲线的相同点是都采用了TPR (Recall),都可以用AUC来衡量分类器的效果。不同点是ROC曲线使用了FPR,而PR曲线使用了Precision,因此PR曲线的两个指标都聚焦于正例。类别不平衡问题中由于主要关心正例,所以在此情况下PR曲线被广泛认为优于ROC曲线。类别不平衡问题中ROC曲线确实会作出一个比较乐观的估计,而PR曲线则因为Precision的存在会不断显现FP的影响。

    PR vs ROC

    • ROC曲线由于兼顾正例与负例,所以适用于评估分类器的整体性能,相比而言PR曲线完全聚焦于正例。
    • 如果有多份数据且存在不同的类别分布,比如信用卡欺诈问题中每个月正例和负例的比例可能都不相同,这时候如果只想单纯地比较分类器的性能且剔除类别分布改变的影响,则ROC曲线比较适合,因为类别分布改变可能使得PR曲线发生变化时好时坏,这种时候难以进行模型比较;反之,如果想测试不同类别分布下对分类器的性能的影响,则PR曲线比较适合。
    • 如果想要评估在相同的类别分布下正例的预测情况,则宜选PR曲线。
    • 类别不平衡问题中,ROC曲线通常会给出一个乐观的效果估计,所以大部分时候还是PR曲线更好。
    • 最后可以根据具体的应用,在曲线上找到最优的点,得到相对应的precision,recall,f1 score等指标,去调整模型的阈值,从而得到一个符合具体应用的模型。

    2.8 KS Kolmogorov-Smirnov

      KS值是在模型中用于区分预测正负样本分隔程度的评价指标,一般应用于金融风控领域。与ROC曲线相似,ROC是以FPR作为横坐标,TPR作为纵坐标,通过改变不同阈值,从而得到ROC曲线。而在KS曲线中,则是以阈值作为横坐标,以FPR和TPR作为纵坐标,ks曲线则为TPR-FPR,ks曲线的最大值通常为ks值。

      为什么这样求KS值呢?我们知道,当阈值减小时,TPR和FPR会同时减小,当阈值增大时,TPR和FPR会同时增大。而在实际工程中,我们希望TPR更大一些,FPR更小一些,即TPR-FPR越大越好,即ks值越大越好。

      可以理解TPR是收益,FPR是代价,ks值是收益最大。图中绿色线是TPR、蓝色线是FPR。

     

     转自:https://zhuanlan.zhihu.com/p/36305931

      

  • 相关阅读:
    css移除a标签及map、area(图片热区映射)点击过后的边框
    PDA后台运行、安装程序
    如何通过.Net Compact Framework来获得应用程序的当前路径
    mysql 实现row_number,获取上一条,下一条
    关于神经网络算法的 Python例程
    C# Windows Service 用代码实现安装、运行和卸载服务的方法
    sql server 递归查询的使用
    sql server 行转列及列转行的使用
    数据库索引优化
    LiveCharts 提示框(DataTooltip)百分比一直为0.00%解决办法
  • 原文地址:https://www.cnblogs.com/z1141000271/p/12715885.html
Copyright © 2011-2022 走看看