DMP核心流程-回归验证【技术类】

吴俊吴俊

上篇《样本训练》介绍了很多常用的分类算法,实操我们中该如何评价不同分类器的质量呢?首先要定义,分类器的准确率,指分类器正确分类的项目占所有被分类项目的比率。通常使用回归测试来评估分类器的准确率,最简单的方法是用构造完成的分类器对训练数据进行分类,然后根据结果给出准确率评估。但这不是一个好方法,因为使用训练数据作为检测数据有可能因为过分拟合而导致结果过于乐观,所以一种更好的方法是在构造初期将训练数据一分为二,用一部分构造分类器,然后用另一部分检测分类器的准确率。所以一般会对原始数据进行分割,分割成训练集和测试集。这样做是为了方便验证在训练集上训练得到的模型,是否能在测试集中可取得理想的效果。通常(训练集:测试集)分割比例为6:4或者7:3。训练集用来训练算法,学习其中的变量,测试集用来查看或检验所选算法在测试集上的效果。目前,常见的开源算法类库现成的有很多,只要将这些类库装载到计算环境中使用即可。(数据科学(data science)领域较流行的运行机器学习算法的语言有R、Python。)

衡量算法效果。常见的评价指标有:正确率、召回率和F值:

  • 正确率 = 正确识别的个体总数 / 识别出的个体总数

  • 召回率 = 正确识别的个体总数 / 测试集中存在的个体总数

  • F值 = 正确率 * 召回率 * 2 / (正确率 + 召回率)

举个例子:某池塘有1400条鱼,300只虾,300只蟹。现在以捕鱼为目的。撒一大网,网着了700条鱼,200只虾,100只蟹。那么,这些指标分别如下:

正确率 = 700 /(700 + 200 + 100) = 70%

召回率 = 700 /1400 = 50%

F值 = 70% * 50% * 2 / (70% + 50%) = 58.3%

若把池子里的所有的鱼、虾和蟹都一网打尽,这些指标变为:

正确率 = 1400 /(1400 + 300 + 300) = 70%

召回率 = 1400 /1400 = 100%

F值 = 70% * 100% * 2 / (70% + 100%) = 82.35%

由此可见,正确率是评估算法预测的成果中,目标样本所占的比例;召回率,主要是从关注领域中,召回目标类别的比例;而F值,则是综合这二者指标的评估指标,用于综合反映整体的指标。

  • ROC(receiver operating characteristic)曲线

对于二分分类,原始类分为positive、negative,我们可以标记为p、n。如图9-9所示,排列组合后得到4种结果。于是我们可以得到四个指标,分别为真正(TP)、伪正(FP);伪负(FN)、真负(TN)。

图9‑9二分分类典型四象限示意

对于正、负分类问题,一些分类器得到的结果往往不是0,1这样的标签,如神经网络,得到诸如0.5、0.8这样的分类结果。这时,我们可以人为取一个阈值,比如0.4,那么小于0.4的为负类,大于等于0.4的为正类,这样可以得到一个分类结果。同样这个阈值我们可以取0.1、0.2等等。取不同的阈值,得到的最后分类情况也就不同。例如图9-10所示:

图9‑10正负样本图示例

图9-10中左部的曲线图表示样本为正类的分布图,右部的曲线表示样本为负类的分布图。那么我们从中取一条直线,若假设直线左边分为正类,右边分为负,这条直线也就是我们所取的阈值。可见若我们移动该直线,这样阈值的不同,可以得到不同的结果。但是由分类器推测出的样本分布图始终是不变的。这时候就需要一个独立于阈值,只与分类器有关的评价指标,来衡量特定分类器的好坏。还有在类不平衡的情况下,如正样本90个,负样本10个,直接把所有样本分类为正样本,得到识别率为90%。但这显然没有意义。这就是ROC曲线的主要动机。

ROC空间将伪正率(FPR)定义为 X 轴,真正率(TPR)定义为 Y 轴。这两个值由上面四个值计算得到,公式如下:

TPR:在所有实际为正的样本中,被正确地判断为正的比率。TPR=TP/(TP+FN)

FPR:在所有实际为负的样本中,被错误地判断为正之比率。FPR=FP/(FP+TN)

在实际应用中,我们当然希望尽量把正确的目标人群找出来作为主要任务,也就是第一个指标TPR越高越好。而把负的样本为误判,也就是第二个指标FPR要越低越好。不难发现,这两个指标之间是相互制约的。若我们对于负样本判别标准定义的特别细致严格,一点小的特征都判断为负的话,那么第一个指标就会很高,但是第二个指标也会相应地变高。最极端的情况下,若我们把所有的样本都看做负的话,那么第一个指标达到1,第二个指标也为1。

我们以FPR为横轴,TPR为纵轴,得到ROC空间:

图9‑11 ROC空间示例图

我们可以看出,左上角的点(TPR=1,FPR=0),为完美分类,也就是个高明全对的推断。左边离中线近一些的点A(TPR>FPR), A的判断大体是正确的。中线上的点B(TPR=FPR),也就是B可能全都是蒙的,对一半错一半;右下半的点C(TPR<FPR),这个推断很可能错误。上图中一个阈值,得到一个点。现在我们需要一个独立于阈值的评价指标,来衡量这个分类器如何,也就是遍历所有的阈值,得到ROC曲线。

还是以图9-10为例,我们可以遍历其中所有的阈值,能够在ROC平面上得到ROC曲线。如图9-12所示ROC曲线。

图9‑12 ROC曲线示例图

曲线距离左上角越近,证明分类器效果越好。

图9‑13三种分类器得出的不同ROC曲线示例图

如图9-13所示的示例,是三条ROC曲线,若在0.23处取一条直线。那么,在同样的低FPR=0.23的情况下,最外侧那条线的分类器得到更高的TPR。也就表明,ROC越往上,分类器效果越好。我们用一个标量值AUC来量化她。

  • AUC(Area Under ROC Curve)

如图9-14所示,AUC值为ROC曲线所覆盖的区域面积,显然,AUC越大,分类器分类效果越好。

AUC = 1,是完美分类器,采用这个预测模型时,不管设定什么阈值都能得出完美预测。绝大多数预测的场合,不存在完美分类器。

0.5 < AUC< 1,优于随机猜测。这个分类器(模型)若妥善设定阈值的话,能有预测价值。

AUC = 0.5,跟随机猜测一样(例:抛硬币),模型没有预测价值。

AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

图9‑14 AUC示例图

  • AUC的物理意义

假设分类器的输出是样本属于正类的score(置信度),则AUC的物理意义为,任取一对(正、负)样本,正样本的score大于负样本的score的概率。

  • 计算AUC:

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

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

第三种方法:实际上和第二种方法是一样的,但可减小复杂度。直接计算正样本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)。最后我们得到AUC。时间复杂度为O(N*M)。即:AUC=((所有的正例rank相加)-(M*(M+1))/2)/(M*N)。详细计算公式见公式9-3。

公式9‑3 AUC公式

另外,特别需要注意的是,对于存在score相等的情况时,对相等score的样本,需要赋予相同的rank(无论该相等的score是出现在同类样本还是不同类的样本之间的,都需要这样处理)。具体操作就是再把所有这些score相等的样本的rank取平均。然后再使用上述公式。

当然实操中往往数据中不可避免的存在一些噪音,所以常会采用一些人工干预设置补偿因子及系数的方式。一方面这样做可以一定程度简化算法及模型,另一方面也大大降低对计算资源的消耗,从而降低成本提升效率。(这也是典型的二八原则做法:大部分80%的问题仅需要20%的投入及特征模型即可解决。)

(转载请注明出处:微信订阅号:ad_automation)

文字表现力有限,欢迎参加《5.28线下大课堂》面对面为您答疑解惑讲透您关心的问题。

「真诚赞赏,手留余香」
还没有人赞赏,快来当第一个赞赏的人吧!
文章被以下专栏收录
还没有评论
推荐阅读