凡事都要有个标准,仅仅看实验测试的表现还不够,衡量泛化能力还需要有一套评价标准,也叫做性能度量(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)学习《机器学习》(周志华著,清华大学出版社)一书过程中的笔记,内容均为本人结合书中讲述和自身理解所写,文章配图、视频均为本人原创,转载和引用请注明出处并不得篡改作者姓名,本人保留《*著作权法》赋予的所有权利。