机器学习入门学习笔记(一)模型的评估和选择

一、一些基本概念

错误率(error rate):分类错误的样本数占样本总数的比例。在m个样本中有a个样本分类错误,则错误率E=a/m。

精度(accuracy) = 1 - 错误率 = 1-a/m。

训练误差(training error)或经验误差(empirical error):学习器的实际预测输出与样本的真实输出之间的差异。

泛化误差(generalization error):在新样本上的误差。

我们希望得到的是在新样本上能表现得很好的学习器,或者说是得到泛化误差小的学习器。然而,我们事先并不知道新样本是什么样,实际能做的是努力使训练误差最小化

但是,在很多情况下,我们可以学得一个训练误差很小、在训练集上表现很好的学习器,例如甚至对所有训练样本都分类正确,即分类错误率为零,分类精度为100%,但这是不是我们想要的学习器,这样的学习器在多数情况下都不好。

两个现象

过拟合(overfitting):当学习器把训练样本学得“太好”了的时候,可能已经把训练样本自身的一些特点当作了所有潜在样本都会具有的一般性质,这样就会导致泛化性能下降。(特性当成一般性)

欠拟合(underfitting):与“过拟合”相对,指对训练样本的一般性质尚未学好

解决方法:

欠拟合比较容易克服,例如在决策树学习中扩展分支、在神经网络学习中增加训练轮数等。

过拟合是无法彻底避免的,我们所能做的只是“缓解”,或者说减小其风险。过拟合是机器学习面临的关键障碍,各类学习算法都必然带有些针对过拟合的措施。

 

“模型选择”(model selection)问题:理想的解决方案是对候选模型的泛化误差进行评估,然后选择泛化误差最小的那个模型。但是我们一般无法直接获得泛化误差,而训练误差又由于过拟合现象的存在而不适合作为标准,那么,在现实中如何进行模型评估与选择呢?

二、评估方法(数据集划分)

对学习器的泛化误差进行评估并进而做出选择,我们需使用一个“测试集”(testing set)来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”(testing error)作为泛化误差的近似。

对测试集(testing set)的选择需要注意:从样本真实分布中独立同分布采样而得,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过。

一个包含m个样例的数据集D={ (x1, y1),(x2,y2),...,(xm, ym)}既要训练,又要测试,怎样才能做到呢?

答案是:通过对D进行适当的处理,从中产生出训练集S和测试集T。以下介绍三种数据集的划分方法:

1、留出法(hold-out)

直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个作为测试集T,即(D = S∪T,S∩T=∅)。在S上训练出模型后,用T来评估其测试误差,作为对泛化误差的估计。

问题一:训练/测试集划分的数据分布不一致性问题。会引入额外的偏差而对最终结果产生影响。

分层采样(stratified sampling):保留类别比例的采样方式。例如 S、T都按正例反例按1:1采样。

问题二:单次使用留出法得到的估计结果往往不够稳定可靠。

在使用留出法时,一般要采用若干次随机划分、重复进行实验评估后取平均值作为留出法的评估结果。例如进行100 次随机划分,每次产生一个训练/测试集用于实验评估,100 次后就得到100个结果,而留出法返回的则是这100结果的平均。

问题三:S与T划分大小的问题。

我们希望评估的是用整个数据集D训练出的模型的性能。若令训练集S包含绝大多数样本,则训练出的模型可能更接近于用D训练出的模型,但由于T比较小,评估结果可能不够稳定准确;若令测试集多包含一些样本,则训练集S与D差别更大了,被评估的模型与用D训练出的模型相比可能有较大差别,从而降低了评估结果的保真性(fidelity)。

这个问题没有完美的解决方案,常见做法是将大约2/3~4/5的样本用于训练,剩余样本用于测试。

2、交叉验证法(cross validation)

先将数据集D划分为k个大小相似的互斥子集,即D= D U D2 U... U Dk, Di∩Dj=∅ (i≠j)。每个子集D都尽可能保持数据分布的一致性,即从D中通过分层采样得到。

然后,每次用k-1个子集的并集作为训练集,余下的那个子集作为测试集。这样就可获得k组训练/测试集,从而可进行k次训练和测试,最终返回的是这k个测试结果的均值。

显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,为强调这一点,通常把交叉验证法称为“k折交叉验证”(k-fold cross validation)。k最常用的取值是10,此时称为10折交叉验证;其他常用的k值有5、20等。

问题:与留出法相似,将数据集D划分为k个子集同样存在多种划分方式,为减小因样本划分不同而引入的差别,k折交又验证通常要随机使用不同的划分重复p次,最终的评估结果是这p次k折交叉验证结果的均值,例如常见的有“10次10折交叉验证”。

特例——留一法(Leave-One-Out,简称 LOO)

假定数据集D中包含m个样本,令k=m。显然,留一法不受随机样本划分方式的影响,因为划分是唯一的。

优点:留一法使用的训练集与初始数据集相比只少了一个样本,在绝大多数情况下,留一法中被实际评估的模型与期望评估的用 D训练出的模型很相似。因此,留一法的评估结果往往被认为比较准确。

缺陷:在数据集比较大时,训练m个模型的计算开销巨大。(例如数据集包含1百万个样本,则需训练1百万个模型),留一法的估计结果也未必永远比其他评估方法准确,“没有免费的午餐”定理对实验评估方法同样适用。

3、自助法(bootstrapping)

给定包含m个样本的数据集D,我们对它进行采样产生数据集D':每次随机从D中挑选一个样本,将其拷贝放入D',然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次后,我们就得到了包含m个样本的数据集D',这就是自助采样的结果。显然,D中有一部分样本会在D'中多次出现,而另一部分样本不出现。

将D'用作训练集,D\D'用作测试集;这样,实际评估的模型与期望评估的模型都使用m个训练样本,经验证,有数据总量约1/3的没在训练集中出现的样本用于测试,所以这是一个比较有效的划分方法。

小结

留出法和交叉验证法的主要问题是,由于保留了一部分样本用于测试,实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差。

留一法(交叉验证法特例)受训练样本规模变化的影响较小,但计算复杂度又太高了。

自助法产生的数据集改变了初始数据集的分布,这会引入估计偏差。但是,自助法能从初始数据集中产生多个不同的训练集,这对集成学习等方法有很大的好处。

关于适用范围:自助法在数据集较小、难以有效划分训练/测试集时很有用。而在初始数据量足够时,留出法和交叉验证法更常用一些。

4、调参与最终模型

在进行模型评估与选择时,除了要对适用学习算法进行选择,还需对算法参数进行设定,这就是通常所说的“参数调节”或简称“调参”(parameter tuning)。

模型选择基本的思路:对每种参数配置都训练出模型,然后把对应最好模型的参数作为结果。有以下三个问题:

问题1 参数取值问题

学习算法的很多参数是在实数范围内取值,对每种参数配置都训练出模型来是不可行的。

常用的做法:对每个参数选定一个范围和变化步长,例如在[0,0.2]范围内以 0.05 为步长则实际要评估的候选参数值有5个,最终是从这5个候选值中产生选定值。显然,这样选定的参数值往往不是“最佳”值,但这是在计算开销和性能估计之间进行折中的结果,通过这个折中,学习过程才变得可行。

问题2 参数组合问题

事实上,即便在进行上诉折中后,调参往往仍很困难。

可以简单估算一下:假定算法有3个参数,每个参数仅考虑5个候选值,这样对每一组训练/测试集就有125 个模型需考察;很多强大的学习算法有大量参数需设定,这将导致极大的调参工程量,以至于在不少应用任务中,参数调得好不好往往对最终模型性能有关键性影响。

问题3 验证模型

给定包含 m个样本的数据集D,在模型评估与选择过程中由于需要留出一部分数据进行评估测试,事实上我们只使用了一部分数据训练模型。因此,在模型选择完成后,学习算法和参数配置已选定,此时应该用完整的数据集D重新训练模型。

三、性能度量(performance measure)

性能度量是对测试结果进行分析。在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果。

在预测任务中,给定样例集D={(x1,1),(x2,y2),…,(xm,ym)},其中yi是示例xi的真实标记。要评估学习器 f的性能,就要把学习器预测结果f(x)与真实标记y进行比较。有以下 5 种度量和比较方法:

1、均方误差(mean squared error)

回归任务最常用的性能度量。

2、错误率与精度

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

对样例集D,分类错误率定义为

精度则定义为

3、查准率(precision)、查全率(recall)与F1

这类需求在信息检索、Web搜索等应用中经常出现。例如在信息检索中,我们经常会关心“检索出的信息中有多少比例是用户感兴趣的”“用户感兴趣的信息中有多少被检索出来了”。

对于二分类问题,将样例根据其真实类别与学习器预测类别的组合划分为真正例(true positive)、假正例(false positive)、真反例(true negative)、假反例(false negative)四种情形,令TP、FP、TN、FN分别表示其对应的样例数,则显然有TP+FP+TN+FN = 样例总数。分类结果的“混淆矩阵”(confusion matrix)如表所示。

查准率P与查全率R分别定义为:

一般情况下,查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。例如,若希望将好瓜尽可能多地选出来,则可通过增加选瓜的数量来实现,如果将所有西瓜都选上,那么所有的好瓜也必然都被选上了,但这样查准率就会较低。若希望选出的瓜中好瓜比例尽可能高,则可只挑选最有把握的瓜,但这样就难免会漏掉不少好瓜,使得查全率较低。

P-R曲线(查准率-查全率曲线)

在很多情形下,可根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的则是学习器认为“最不可能”是正例的样本,按此顺序逐个把样本作为正例进行预测,则每次可以计算出当前的查全率、查准率。以查准率为纵轴、查全率为横轴作图,就得到了查准率-查全率曲线,简称“P-R曲线”。

P-R图直观地显示出学习器在样本总体上的查全率、查准率。

情况一:若一个学习器的P-R曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者,如图中学习器A的性能优于学习器C。

情况二:两个学习器的P-R 曲线发生了交叉,如图中的A与B,则难以一般性地断言两者孰优孰劣。

(1)只能在具体的查准率或查全率条件下进行比较。

(2)一个比较合理的判据是比较P-R曲线下面积的大小,它在一定程度上表征了学习器在查准率和查全率上取得相对“双高”的比例,但这个值不太容易估算。

(3)用平衡点(Break-Event Point,简称BEP)度量,它是“查准率=查全率”时的取值,如图中学习器C的 BEP是0.64,而基于BEP的比较,可认为学习器A优于B。

(4)BEP还是过于简化了些,更常用的是F1度量:

在一些应用中,对查准率和查全率的重视程度有所不同。例如在商品推荐系统中,为了尽可能少打扰用户,更希望推荐内容确是用户感兴趣的,此时查准率更重要;而在逃犯信息检索系统中,更希望尽可能少漏掉逃犯,此时查全率更重要。F1度量的一般形式Fβ,能让我们表达出对查准率/查全率的不同偏好,它定义为:

其中β>0度量了查全率对查准率的相对重要性β=1时退化为标准的F1;B>1时查全率有更大影响;β<1时查准率有更大影响。

 

 

很多时候我们有多个二分类混淆矩阵,例如进行多次训练/测试,每次得到一个混淆矩阵;或是在多个数据集上进行训练/测试,希望估计算法的“全局”性能;甚或是执行多分类任务,每两两类别的组合都对应一个混淆矩阵...

总之,我们希望在n个二分类混淆矩阵上综合考察查准率和查全率.

一种直接的做法是先在各混淆矩阵上分别计算出查准率和查全率,记为(P1,R1),(P2,R2),....(Pn,Rn),再计算平均值,这样就得到“宏查准率”(macro-P)、“宏查全率”(macro-R),以及相应的“宏F1”(macro-F1):

还可先将各混淆矩阵的对应元素进行平均,得到TP、FP、TN、FN的平均值,分别记为,再基于这些平均值计算出“微查准率”(micro-P)、“微查全率”(micro-R)和“微F1”(micro-F1):

4、ROC与AUC

很多学习器是为测试样本产生一个实值或概率预测,然后将这个预测值与一个分类阈值(threshold)进行比较,若大于阙值则分为正类,否则为反类。例如,神经网络在一般情形下是对每个测试样本预测出一个[0.0,1.0]之间的实值,然后将这个值与0.5进行比较,大于0.5则判为正例,否则为反例。这个实值或概率预测结果的好坏,直接决定了学习器的泛化能力。实际上,根据这个实值或概率预测结果,我们可将测试样本进行排序,“最可能”是正例的排在最前面,“最不可能”是正例的排在最后面。这样,分类过程就相当于在这个排序中以某个“截断点”(cut point)将样本分为两部分,前一部分判作正例,后一部分则判作反例。

排序本身的质量好坏,体现了综合考虑学习器在不同任务下的“期望泛化性能”的好坏,或者说,“一般情况下”泛化性能的好坏。ROC曲线则是从这个角度出发来研究学习器泛化性能的有力工具。。

ROC全称是“受试者工作特征”(Receiver Operating Characteristic)曲线,它源于“二战”中用于敌机检测的雷达信号分析技术,二十世纪六七十年代开始被用于一些心理学、医学检测应用中,此后被引入机器学习领域。与PR曲线相似,我们根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了“ROC曲线”.

与PR曲线使用查准率、查全率为纵、横轴不同,ROC曲线的纵轴是“真正例率”(True Positive Rate,简称TPR),横轴是“假正例率”(False PositiveRate,简称FPR),两者分别定义为

现实任务中通常是利用有限个测试样例来绘制 ROC 图,此时仅能获得有限个(真正例率,假正例率)坐标对,无法产生图(a)中的光滑ROC曲线,只能绘制出如图(b)所示的近似ROC曲线。

绘图过程:

1、给定m+个正例和m-个反例。

2、根据学习器预测结果对样例进行排序。

3、把分类阈值设为最大,即把所有样例均预测为反例,此时真正例率和假正例率均为0,在坐标(0,0)处标记一个点。

4、将分类阅值依次设为每个样例的预测值,即依次将每个样例划分为正例。设前一个标记点坐标为(x,y),当前若为真正例,则对应标记点的坐标为;当前若为假正例,则对应标记点的坐标为,然后用线段连接相邻点即得。

进行学习器的比较时,与PR图相似:

情况一:若一个学习器的ROC曲线被另一个学习器的曲线完全“包住”,则可断言后者的性能优于前者

情况一:若两个学习器的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣.此时如果一定要进行比较,则较为合理的判据是比较ROC曲线下的面积,即 AUC (Area Under ROC Curve)。。

AUC可通过对ROC曲线下各部分的面积求和而得。

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

在现实任务中,不同类型的错误往往造成的后果不同。例如在医疗诊断中,错误地把患者诊断为健康人与错误地把健康人诊断为患者,看起来都是犯了“一次错误”,但后者的影响是增加了进一步检查的麻烦,前者的后果却可能是丧失了拯救生命的最佳时机;再如,门禁系统错误地把可通行人员拦在门外,将使得用户体验不佳,但错误地把陌生人放进门内,则会造成严重的安全事故。

为权衡不同类型错误所造成的不同损失,可为错误赋予“非均等代价”(unequal cost)以二分类任务为例,我们可根据任务的领域知识设定一个“代价矩阵”(cost matrix),如下表所示,其中 cost ij表示将第i类样本预测为第j类样本的代价。一般来说, cost ii =0;若将第0类判别为第1类所造成的损失更大,则cost 01 > cost 10;损失程度相差越大,cost 01 与 cost 10值的差别越大。

前面介绍的一些性能度量大都是假设均等代价,例如定义的错误率是直接计算“错误次数”,并没有考虑不同错误会造成不同的后果。而在非均等代价下,我们所希望的不再是简单地最小化错误次数,而是希望最小化“总体代价”(total cost)。若将表2.2中的第0类作为正类、第1类作为反类,令D+与D-分别代表样例集D的正例子集和反例子集,则“代价敏感”(cost-sensitive)错误率为


代价曲线

“代价曲线”(cost curve)图的横轴是取值为[0,1]的正例概率代价,其中p是样例为正例的概率。

纵轴是取值为[0,1]的归一化代价,其中FPR是假正例率,FNR=1-TPR是假反例率。

代价曲线的绘制很简单:ROC曲线上每一点对应了代价平面上的一条线段,设ROC曲线上点的坐标为(TPR,FPR),则可相应计算出 FNR,然后在代价平面上绘制一条从(0,FPR)到(1,FNR)的线段,线段下的面积即表示了该条件下的期望总体代价;如此将 ROC曲线上的每个点转化为代价平面上的一条线段,然后取所有线段的下界,围成的面积即为在所有条件下学习器的期望总体代价如下图所示。

参考书目:《机器学习》周志华

猜你喜欢

转载自blog.csdn.net/chengdong996/article/details/106818082
今日推荐