机器学习笔记3——模型评估与选择(二)

时间:2023-01-05 21:34:16

凡事都要有个标准,仅仅看实验测试的表现还不够,衡量泛化能力还需要有一套评价标准,也叫做性能度量(performance measure)。当然标准也可以有好几套,从不同维度和侧重来评价。这同时也反映了模型的好坏是相对的,换一个标准评价的结果是不一样的。没有最好的,只有最合适的。

一、性能度量

1、错误率与精度

这是分类任务最常用的两种性能度量。

错误率 = 分类错误的数量 / 样本总数

精度 = 分类正确的数量 / 样本总数

错误率 + 精度 = 1

2、查准率、查全率与F1

错误率和精度能够衡量有多少比例的美女被doudog识别错误或识别正确。但有时候我想知道,在doudog认为是女神的美女中有多少真的是女神,或者所有的女神中有多少被doudog识别出来了。这句话有点拗口,换个说法容易理解:被杀的里面有多少是该杀的,该杀的里面有多少没杀。前者是查准率(precision),后者是查全率(recall)。

提高查准率要“疑罪从无”,漏网1000不能错杀1个;提高查全率要“疑罪从有”,错杀1000不能漏网1个。因此查准率和查全率是一对矛盾的度量。

如果按照最可能是——>最不可能是的顺序,对模型的预测结果排序,并按照这个顺序依次计算每个样本当前的查准率和查全率,计算时要假设当前计算的样本是正例(是女神),然后以查准率为纵轴、查全率为横轴作图,就得到查准率-查全率曲线(P-R曲线)。

把不同模型的P-R曲线绘制到同一坐标轴上,就可以有如下判断:

· 若A的曲线完全包住B的曲线(没有交叉),则A的性能优于B;

· 若A的曲线与B的曲线交叉,则曲线下面积大的性能优;
· 若A的曲线的平衡点取值大于B的曲线平衡点取值,则A的性能优于B;

平衡点(Break-Even Point, BEP)是查准率 = 查全率时的取值。

BEF过于简单,常用的是基于查准率与查全率的调和平均,即F1。

F1 = 2 * P * R / (P + R),其中P为查准率,R为查全率。

但在不同的任务中,常常对查准率和查全率的重视程度不一样,比如网络营销希望更准确的向目标客户推送产品信息,更加关注查准率;警察叔叔则希望不漏掉一个逃犯,更加关注查全率。因此,定义了一个F1的一般形式Fβ,以表达对查准率或查全率的偏好:

Fβ = (1 + β方) * P * R / ((β方 * P) + R), 其中β > 0

β = 1, Fβ = F1

β > 1,更关注查全率

β < 1,更关注查准率

3、ROC与AUC

doudog识别女神的方法可以这样,通过对每位美女的特征数据建模,最后计算出一个实值或者概率,然后将这个值与分类阈值比较,大于阈值则为女神,否则为女汉子。多数学习算法都是这个套路。因此,我们对测试样本可以按照最可能是——>最不可能是排序,然后设定一个截断点一分为二,前一部分就是女神,后一部分就是女汉子。

如果更关注查准率,可以把截断点往前提,如果更关注查全率,则可以把截断点往后推。

在上面的排序基础上,依次对每个样本(假设当前样本是正例)计算真正例率(True Positive Rate,TPR)和假正例率(False Positive Rate,FPR)。以真正例率为纵轴、假正例率为横轴作图,就得到ROC(Receiver Operating Characteristic,受试者工作特征)曲线。

真正例指模型预测是正例,真实情况也确实是正例,真正例率就是真正例在实际真实正例中的比例,即该杀的有多少被杀了,对应查全率。

假正例指模型预测是正例,但真实情况是反例,假正例率就是假正例(实为反例)在实际真实反例中的比例,即不该杀的有多少被杀了,对应查准率。

ROC曲线对模型进行比较时,与P-R图的比较原则类似。

两个ROC曲线交叉时要比较曲线下的面积,即AUC(Area Under ROC Curve)。

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

如果doudog把一位女神错判为女汉子,这位女神可能会发飙,如果把女汉子错判为女神,那这位女汉子可能会很开心。如果医院的医疗系统把癌症患者错判为健康人,后果将涉及人命,反过来如果把健康人错判为癌症患者,那后果只是虚惊一场。同样是犯错误,代价却不一样。

因此,单纯以错误次数为基础来评估错误率、查全率或者查准率是不完善的,毕竟我们真正要得到的是损失最低、代价最小的模型。这就要为错误定义“非均等代价”(unequal cost)。

可令COSTij为把i类样本错判为j类样本的代价,对所有类型错误的数量与其错误代价的乘积求和,再除以样本总数量,就得到代价敏感(cost-sensitive)错误率。

与ROC以真正例率为纵轴、假正例率为横轴类似,以归一化代价为纵轴、正例概率代价为横轴作图,就得到代价曲线(cost curve)。

令p是样例为正例的概率,FPR为假正例率,FNR为假反例率,可以得到归一化代价和正例概率代价:

归一化代价COSTnorm = ( FNR * p * cost01 + FPR * ( 1 - p ) * cost10 ) / (p * cost01 + ( 1 - p ) * cost10 )

正例概率代价P(+)COST = p * cost01 / ( p * cost01 + ( 1 - p ) * cost10 )

归一化代价和正例概率代价的取值范围均为[0, 1]。

ROC曲线上的每一个点(FPR, TPR)都对应了代价曲线上的一条线段,在代价曲线坐标中,绘制一条从(0, FPR)到(1, FNR)的线段,FNR = 1 - TPR,线段下的面积就表示了该条件下的期望总体代价。画出ROC曲线上所有点对应的线段,所有线段的下界围成的面积就是这个模型的期望总体代价。

这一段儿一会儿FPR一会儿TPR一会儿又FNR,有点绕,看一遍肯定乱七八糟,看两遍若有所懂,看三遍,我发现周老师貌似搞了一个小错误。

他的原文是:设ROC曲线上点的坐标为(TPR, FPR)……

但根据前面ROC曲线的定义,纵轴是真正例率(TPR),横轴是假正例率(FPR),那么ROC曲线上的坐标应该为(FRP,TPR)才是。搞反了?还是横纵无所谓,只要前后一致即可?我先机械学习一下,回头再“剪枝”。

二、比较检验

一般我们会训练多个模型,通过实验评估方法测得模型性能度量结果之后,还需要对结果进行比较,这当然不是简单的比大小,而是要运用统计假设检验(hypothesis test)得到模型的泛化性能是否在统计意义上较优。

西瓜书里介绍了二项检验(binomial test)、t检验(t-test)、交叉验证t检验、McNemar检验、Friedman检验与Nemenyi后续检验等几种方法。由于大学概率统计课上经常睡觉,被老师砸过粉笔,这段有阴影的就先掐了不写了。

为了求解阴影面积,我在某东和某当买了两本书:

《概率导论(Introduction to Probability)》,Dimitri P. Bertsekas著

《统计学(Statistics for Engineers and the Sciences)》,William Mendenhall、Terry Sincich著

三、偏差与方差

泛化误差可以分解为偏差、方差与噪声之和,偏差-方差分解(bias-variance decomposition)是解释泛化性能的重要工具。

偏差度量了算法的期望预测与真实结果的偏离程度。

方差度量了同样大小训练集变动导致的性能变化。

噪声涉及问题本身的难度。

综上,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度共同决定的。

但偏差与方差是有冲突的,即偏差-方差窘境(bias-variance dilemma)。

在训练程度不足时,学习器拟合程度不强,训练数据的扰动不足以产生显著变化,此时偏差主导泛化错误率。

随着训练程度加深,学习器拟合能力增强,训练数据的扰动逐渐可以被学习器学到,方差逐渐主导泛化错误率。

如果继续加深训练,则有可能发生过拟合。


本文为学习思考笔记,难免有错误和不准确之处,欢迎吐糟、探讨。

原创声明:“机器学习笔记”系列文章为本人(李博blog.xzlib.com学习《机器学习》(周志华著,清华大学出版社)一书过程中的笔记,内容均为本人结合书中讲述和自身理解所写,文章配图、视频均为本人原创,转载和引用请注明出处并不得篡改作者姓名,本人保留《*著作权法》赋予的所有权利。