【西瓜书笔记】——第二章:模型评估与选择

【索引】
本节涉及核心内容:
1、评估方法(留出法、交叉验证法……)
2、性能度量方式(错误率与精度、查准率P与查全率R、ROC曲线……)


1、经验误差与过拟合

错误率:分类错误的样本数占样本总数的比例
精度:精度=1-错误率

误差:学习器的实际预测输出与样本的真是输出之间的差异
其中:
训练误差经验误差:指的是学习器在训练集上的误差
泛化误差:指的是学习器在新样本上的误差

因此,我们希望得到泛化误差小的学习器,但在事先不知道新样本是什么样的情况下智能努力使经验误差最小化。为了达到该目的,应该从训练样本中尽可能学出适用于所有潜在样本的“普遍规律”。

然而,当学习器把训练样本学的“太好”了的时候,可能已经把训练样本自身的一些特点当作所有潜在样本都会具有的一般性质,这样会导致泛化性能下降。
过拟合:把训练样本自身特点当作将潜在样本具有的一般性质,从而导致泛化性能下降(就是学的太好了,以至于一根筋、死脑筋)
欠拟合:对训练样本的一般性质尚未学好(学的才粗糙了,不具备举一反三的辨识能力)
通常情况下,欠拟合比较容易克服,而过拟合是目前机器学习领域所面临的关键障碍,且过拟合是无法彻底避免的,我们所能做到的就只是缓解或减小其风险。可否再多项式时间内解决的算法决定了此类问题是不是P/NP问题。而机器学习通常面临的问题都是NP难甚至更难,因此若想避免过拟合,那么经验误差最小化就必须要能获得最优解,这就意味着需要构造性地证明P=NP。但实际上P≠NP,那么过拟合就是不可避免的。


2、评估方法

【引言】在现实任务中,我们往往有多种学习算法可供选择,甚至对同一个学习算法,当使用不同的参数配置时,也会产生不同的模型,那么,我们该选用哪一个学习算法、使用哪一种参数配置呢?这就机器学习中的模型选择问题。理想的解决方案是对候选模型的泛化误差进行评估,然后选择泛化误差最小模型,但由于无法直接获得,以及过拟合现象的存在,这个过程往往没有那么简单。

简单说来,泛化误差无法直接获得是因为必须先有训练数据的模拟,但是训练数据并非标准数据。因此机器学习没有一个固定的、准确衡量的标准来定义对于一个新样本而言,其泛化结果是否正确。(就像考试永远不会考原题一样)

通过“测试集”来测试学习器对新样本的判别能力,然后以测试集上的“测试误差”作为泛化误差的近似。通常我们假设测试样本也是从样本真实分布中独立同分布采样而得,但要注意的是,测试集应该尽可能与训练集互斥,即测试样本尽量不在训练集中出现、未在训练过程中使用过。
因此,我们需要一个能够举一反三地模型,而非只会死记硬背的模型。


留出法

留出法直接将数据集D划分成两个互斥的集合,其中一个作为训练集S,另一个作为测试集T。通过在S上训练模型,用T来评估测试误差,作为泛化误差的估计。总之,S用来训练出模型,而T用来计算泛化误差
采取分层采样的方式,保留类别比例,即使按不同比例划分训练/测试集,但是正、反例所在集合中的相对比例还是近似的。

训练集和测试集的划分需要尽可能保持数据分布的一致性,目的是为了避免因数据划分过程引入额外的偏差,从而对最终结果产生影响。(例如:不同类别样本的比例要在训练集、测试集中保持一致。试想如果训练集中全是正例而测试集中全是反例,那将无法划分数据)

不过通常的单次留出法所得到的评估结果往往不够稳定可靠,一般需要进行若干次随即划分、重复进行实验评估后取平均值作为留出法的评估结果。

分层采样:保留类别比例的采样方式称为分层采样。

例如对一个集合进行100次划分,每次都是不同的训练/测试集,总共会得出100个结果,而留出法最后的结果就是这100次结果的平均值。

但是留出法的局限在于:集合只局限在D集合中。无论T也好,D也好,调整比例无法保证结果的稳定性(S小了,方差会大;T小了,偏差会大)。一般做法是将大约2/3 ~ 4/5的样本用于判断,剩余的作为测试。


交叉验证法

将数据集D划分为k个大小相似的互斥子集,每个子集Di都尽可能保持数据分布的一致性,即都从D中通过分层采样得到。每次用k-1个子集的并集作为训练集,剩下的那个子集作为测试集,总共可获得k组训练/测试集,并进行训练,得到k个测试结果,以它们的均值作为最后输出

交叉验证法的稳定性和保真性很大程度上取决于k值,通常取值为10的称为“10折交叉验证”,其他也有k=5或k=20等。

与留出法相似,数据集D的划分也存在多种方式,通常会再对k折交叉验证的过程整体进行p次最终的评估计算,最后求这p次的均值。常见的有10次10折交叉验证

10次10折交叉验证的方式相当于进行100次留出法验证

留一法:交叉验证的特例。当数据集不够庞大时,可以采用留一法,即对所有样本进行唯一分类。假设D数据集合中有m个样本,那么只有唯一方式划分为m个子集,每个子集包含一个样本。(其中每一次在17个样本的集合中,将16个作为训练集,1个作为测试集)绝大多数小数据量的情况下,留一法中被实际评估的模型与期望评估的用D训练出的模型很相似


自助法

【引言】在留出法和交叉验证发中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集是比D要小的,这必然会引入一些因训练样本规模不同而导致的估计偏差。而留一法的样本规模变化最小(只比D少一个样本),但是复杂度太高。

自助法:直接以自助采样法为基础,给定包含m个样本的数据集D,对它进行采样产生数据集D’:每次随机从D中挑选一个样本,将其拷贝放入D‘,然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到。这个过程重复m次后,就得到了包含m个样本的数据集D’(D和D‘的规模相同,但是D’中可能有重复样本,也可能有的样本一次未出现过)。

通过计算可知(书P27,已推导),通过自助采样,初始数据集D中约有36.8%的样本未出现在采集数据集D‘中。

因此,用D‘作为训练集,D\D’作为测试集,以此保证实际评估模型与期望评估模型规模,这样测试的结果称为包外估计

【利】自助法有利于集成学习,因为它能从初始数据集中产生多个不同的训练集;且针对数据集较小、难以有效划分训练/测试集的情况下很有效果。
【弊】自助法产生的数据改变了初始数据集的分布,会引入估计偏差。因此,在数据量较大的情况下,还是使用交叉验证发和留出法较为合适。

个人界定:当数据集规模小于1000样本时,可以考虑使用自助法;当数据集规模小于300样本时,可以考虑使用留一法。当然,具体情况还需考虑计算机处理效率。

调参与最终模型

算法参数配置不同,学得模型的性能也会有显著差别。因为很多参数仅在实数范围内取值,因此对每种参数配置都训练出模型是不可取的,需要给参数选定一个范围变化步长

例如:[0, 0.2]范围内以0.05为步长可以划分为[0, 0.05]、[0.05, 0.1]、[0.1, 0.15]、[0.15, 0.2]这4个区间,同时产生了0、0.05、0.1、0.15、0.2这5个候选值,然后在其中产生选定值。

这样产生的选定值往往不是最佳值,但也是综合了计算开销和性能估计之间进行折中的结果。

试想,如果就像上述例子所说的5个候选值,而对于某一个算法,有3个参数需要调,那么就有5*5*5=125个模型需要考察,这将需要很强大的学习过程以及大量的调参工程。

值得一提的是,往往无论我们采用留出法、交叉验证法还是自助法,通常我们只使用了一部分数据来训练模型因此,还需要在模型选择完成后(此时学习算法、参数配置已经确定的情况下),对整个数据集D进行重新训练,即对全部m个样本进行训练的结果才是我们最终提交给用户的模型。


验证集

模型评估与选择之后,用于评估测试的数据集。
在对比不同模型的泛化能力时,通常利用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集和验证集,然后基于验证集上的性能来进行模型选择和调参。(具体可以想想为内测公测的过程)


机器学习种的参数

算法参数:也被称为超参数,数目通常在10以内。一般由人工设定多个参数候选值后产生模型。
模型参数:数目可以很多。如大型的深度学习项目中,参数甚至可以达到上百亿。一般通过学习来产生多个候选模型。(如:神经网络在不同轮数时停止训练)

上述两者的调参方式相似,均是产生多个模型之后,基于某种评估方法对参数进行选择


3、性能度量

对学习器的泛化性能进行评估,不仅需要有效可行的实验估计方法,还需要有衡量模型泛化能力的评价标准,这就是性能度量。

性能度量反映了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判结果,这意味着模型的好坏是相对的。

模型的好坏取决于:算法、数据和任务需求三大要素。

正如机器学习中的损失函数所提到的,将预测结果f(x)与真实标记y进行比较,正如回归任务中的均方误差MSE;更一般的,对于数据分布D和概率密度分布p(·),均方误差可以描述为其积分(书P29页)。

概率密度:某个随机变量的输出值在某个确定的取值点附近的可能性的函数。落在某个区域内的概率即为概率密度函数在该区域的积分。


3.1错误率与精度

错误率精度是分类任务中最常用的两种性能度量。既适用于二分类任务,页适用于多分类任务。
E ( f ; D ) = 1 m i = 1 m I ( f ( x i ) y i ) E(f;D)=\frac1m\sum_{i=1}^mI(f(x_i)≠y_i)
其中 I 为指示函数,若为真,则为1;若为假,则为0。

if (预测结果 ≠ 实际标签)为真
	则 I 返回1
	否则 I 返回0
sum(I 的全部结果)
avg(sum)

然而,错误率仅仅是对整体性能的评估,例如,100个瓜里有90个是好瓜,那么这100个瓜的好瓜率就是90%,相当于精度;而坏瓜率就是10%,相当于错误率。

而有时候,人们更倾向于了解从100个瓜中,选出50个瓜,这50个瓜的好瓜率为多少。

因此,错误率err和精度acc是最常用的用来衡量性能的指标之一。

3.2查准率、查全率和F1

相比较了解整体的准确与否,有时候,人们更希望了解经过检索或挖掘处理后的信息的正确率如何

查准率P:全部已查样例中正例所占的比例,基底为全部所查样例*。
查全率R:全部正例中,包括漏检样例中*,查出来是正例的样例所占的比例,基底为全部正例

真正例:TP
假正例:FP(误检)
用于计算查准率P P = T P T P + F P P=\frac {TP}{TP+FP}

真反例:TN
假反例:FN(漏检)
其中,TP+FP+TN+FN=样本总数
用于计算查全率P R = T P T P + F N R=\frac {TP}{TP+FN}

其中,假反例就是正例,因为它被漏检了。

查全率和查准率是一对矛盾的度量。查准率高时,查全率往往偏低;而查全率高时,查准率往往偏低。无法同时保证查全率和查准率,通常脂会在简单的任务中,才能使这两个概率都很高。

通常情况下,可以根据学习器的预测结果对样例进行排序,排在前面的是学习器认为“最可能”是正例的样本,排在最后的则是”最不可能“是正例的样本。因此,每次都可以计算并分别以当前的查全率、查准率为横轴和纵轴进行作图,就可以得到”P-R图”或PR曲线

平衡点(BEP):作为综合考虑查准率和查全率的性能度量,它是查准率=查全率时的取值。

F1度量(调和平均) F 1 = 2 P R P + R = 2 T P + T P T N F1= \frac{2*P*R}{P+R} = \frac{2*TP}{样例总数+TP-TN}
实为: 1 F 1 = 1 2 ( 1 P + 1 R ) \frac1{F1} = \frac12 * (\frac1P+\frac1R)

1、当需要尽可能少打扰用户,推送更准确的内容给用户时,查准率显得更为重要。
2、而当进行逃犯信息检索时,为了保证没有漏网之鱼,查全率就显得更为重要。

因此,根据对查准率和查全率的不同偏好,可以将F1度量改为更加一般的形式:Fβ
F β = ( 1 + β 2 ) P R ( β 2 P ) + R F_β = \frac{(1+β^2)*P*R}{(β^2*P)+R}
其中β>0度量了查全率对查准率的相对重要性:
1、当β=1时,Fβ退化为F1;
2、β>1时,查全率R有更大的影响;
3、β<1时,查准率P有更大的影响。
(观察分母)

针对二分类混淆矩阵的两种计算方法

宏观法:计算查准率和查全率,再计算平均值,从而得到宏查准率(macro-P)和宏查全率(macro-R)以及宏F1(macro-F1)
微观法:将混淆矩阵对应元素进行平均后的TP、FP、TN、FN,然后得到微查准率(micro-P)和微查全率(micro-R)微F1(micro-F1)

计算公式与此前的P、R和F1相同

因此,查准率P和查重率R是利用全局域来衡量性能地指标之一。

3.3 ROC与AUC

阈值是用于界定正类和反类的关键。将预测值与阈值比较,其概率预测结果的好坏直接决定了学习器的泛化能力。

例如,根据预测结果的判定类别,将测试样本进行排序,最可能是正例的排在最前面,最不可能是正例的排在最后面。因此,可以在该排序列表中找到一个**截断点(阈值)**将样本集分为两个部分,前半部分作为正例,后半部分作为反例。**可以根据任务需求的不同,决定截断点(阈值)的位置。**若截断点靠前,则更重视查准率P;若截断点靠后,则更重视查全率R。

排序本身的质量的好坏,体现了综合考虑学习器在不同任务下的“一般情况下泛化性能”的好坏。ROC曲线(受试者工作特征曲线-Receiver Operating Characteristic)则便是以此作为出发点来研究学习器泛化性能的有力工具。

ROC曲线:根据学习器的预测结果对样例进行排序,按此顺序逐个把样本作为正例进行预测,每次计算出两个重要量的值,分别以它们为横、纵坐标作图,就得到了“ROC曲线”。与P-R曲线不同的是,ROC曲线的横轴是假正例率(FPR),纵轴是真正例率(TPR)
F P R = T P T P + F N FPR = \frac{TP}{TP+FN}
T P R = F P T P + F P TPR = \frac{FP}{TP+FP}

AUC(Area Under ROC Curve):指的是ROC曲线下的面积。因为与P-R图有所不同的是,当两个学习器的ROC曲线发生交叉,则难以一般性地断言两者孰优孰劣,因此需要借助AUC来得出结果。

因此,ROC及AUC是利用面积来衡量泛化性能地工具和指标之一。且AUC中引用了惩罚计算机制。

3.4 代价敏感错误率与代价曲线

在进行分类的过程中,由于错误的分类,往往会产生不同的损失或代价。为了权衡不同类型错误所造成的不同损失,可以错误赋予“非均等代价”。

以二分类任务为例,定义代价:
c o s t i j i j c o s t i i = 0 cost_{ij}表示将第i类样本误判为j类样本的代价,一般的,cost_{ii}=0
且在代价中,重要的是代价的比值而非绝对值,损失程度越大,互相错认的两个类别间的差值就越大。

代价敏感(cost-sensitive):与前述三种度量标准不同之处在于其建立在非均等代价基础之上,前面三种方式都默认数据代价是均等存在的。在非均等代价情况下,我们希望最小化总体代价,而不是最小化错误次数

通常情况下,用的最多的依然是错误率与精度,其次是ROC/AUC或查准/查全率。

4、比较检验

对于学习其性能评估,经过前述的几个步骤可知:
1、需要对数据进行预处理(前期工作);
2、利用留出法、交叉验证发等进行实验评估;
3、对训练好的学习器进行实践预测,利用精度/错误率、ROC/AUC等方法获得学习器的泛化性能的度量结果,然后就行比较

那么,怎样进行比较呢?

要知道,我们需要比较的是泛化性能,但是通过实验评估方法获得的却是测试集上的性能,因此与训练集的结果可能未必相同;其次,测试集的选择也有一定的影响,包含测试样例的不同也会导致测试结果不同。最后,机器学习算法本身具有一定的随机性,参数相同的情况下也可能产生不同的结果。

4.1统计假设检验(hypothesis test)

在现实任务中,我们无法知道学习器的泛化错误率,只能知道它的测试错误率,且泛化错误率也许会和测试错误率相差甚大。但是一般情况下,两者之间的差别不会特别大,因此可以利用测试错误率估推出泛化错误率的分布


5、偏差与方差

对学速算法除了通过实验估计其泛化性能,人们往往还希望了解它为什么具有这样的性能——利用偏差-方差分解是解释学习算法泛化性能的一种重要工具。
E ( f ; D ) = b i a s 2 ( x ) + v a r ( x ) + δ 2 E(f;D) = bias^2(x) + var(x) + δ^2
推导过程见书P45页,也就是说,泛化误差可分解为偏差、方差和噪声之和。

偏差:度量了学习算法的期望预测与真实结果的偏离程度,刻画了学习算法本身的拟合能力
方差:度量了同样大小的训练集的变动所导致的学习性能的变化,刻画了数据扰动所造成的影响;
噪声:表达了当前任务上任何学习算法所能达到的期望泛化误差的下届,刻画了学习问题本身的难度。

因此可以看出,泛化性能是由学习算法的能力、数据的充分性以及学习任务本身的难度所共同决定的。给定了学习任务,为了取得好的泛化性能,则需使偏差较小,即能够充分拟合数据,并且使方差较小,即使得数据扰动产生的影响小。且偏差和方差分别在数据训练的前期和后期占据了主导地位,取决于训练集的少或多,以及拟合程度的不同。

猜你喜欢

转载自blog.csdn.net/qq_25134999/article/details/82720008