参数权衡
一、模型评估
我们需要确定自己的模型当前效果如何来制定合理的优化策略,因此需要在线下对模型进行评估。
1.1 K折交叉验证
将数据集按层划分为 K 个互斥的子集,每次选择 K−1 个子集作为训练集,剩下的一个子集作为验证集总共训练 K 次,将 K 次训练的测试结果取平均。
K 折交叉验证的误差为:
ϵK−Fold=n1k=1∑Kxi∈Dk∑I(h(xi;D−Dk)=yi)
其中 D−Dk 是用 Dk 作验证集时的训练集, h(xi;D−Dk) 是在 D−Dk 上训练出的模型。
1.2 排除交叉验证
在极端情况下,可以使用 K=n ,即只保留一个数据点(这通常称为LOOCV-保留一个交叉验证)。如果我们的数据集很小,并且无法保留许多数据点进行评估,则LOOCV很重要。
它的误差为:
ϵLOOCV=n1i=1∑nI(h(xi;D−i)=yi)
其中 D−i 是 D 去掉第 i 个数据点后的数据集, h(xi;D−i) 是在 D−i 上训练出的模型。
二、参数调整
我们以经验风险最小化为例:
l(w)=n1i=1∑nI(h(xi),yi)+λr(w)
我们应该思考如何选择 λ 才能尽可能得优化模型。
2.1 欠拟合与过拟合
回顾我们之前所学:在数据集上学习分类器时,可能会出现欠拟合和过拟合两种情况,每种情况都与训练集中的数据外推到未知数据的程度有关:
①欠拟合:在训练集上学习的分类器表达能力不足,甚至无法解释所提供的数据。
在这种情况下,训练误差和测试误差都会很高,因为分类器没有考虑训练集中存在的相关信息。
②过拟合:在训练集上学习的分类器过于具体,无法用于准确推断有关未看到数据的任何内容。
虽然随着时间的推移,训练错误会继续减少,但随着分类器开始根据仅存在于训练集中而不存在于更广泛分布中的模式做出决策,测试错误会再次增加。
我们所追求的是模型在验证集上的误差最小,即寻找甜点。
2.2 显微镜式搜索
以经验风险最小化的参数 λ 为例:
①我们首先找到 λ 的最佳数量级:比如 λ 数量级为:0.01,0.1,1,10,100中的 10
②围绕最佳的数量级进行更细致的搜索:比如围绕 λ 最佳的数量级 10 搜索: 5,10,15,20,...,95
三、偏差-方差权衡
3.1 问题假设
首先我们对数据集进行假设:数据集 D 是从某个分布 P(x,y) 的独立同分布中获取的。
①期望标签:对于一个特征向量 x ,可能并不存在唯一的标签 y ,比如 x 描述一所房子的特征, y 是房子的价格,但是两所相同条件的房子可能会以不同的价格出售,所以对于任何给定的特征向量 x ,在可能的标签上都有一个分布。为此我们引入期望标签:
y=Ey∣x[Y]=∫yy⋅P(y∣x) ∂y
期望标签表示给定特征向量 x 时预期获得的标签。
②期望测试误差:我们用算法 A 学习出一个模型 h ,记作: hD=A(D) ,由此我们可以定义泛化误差:
E(x,y)∼P[(hD(x)−y)2]=∫x∫y(hD(x)−y)2P(x,y) ∂y∂x
我们也可以假设 hD 是一个随机的模型,我们目前只知道算法 A ,对测试误差求取期望:
E(x,y)∼P,D∼Pn[(hD(x)−y)2]=∫D∫x∫y(hD(x)−y)2P(x,y) ∂y∂x∂D
③期望模型:模型 h 其实也是数据集 D 的一个函数,对于给定的算法 A ,我们可以对模型 h 求取期望:
h=ED∼Pn[hD]=∫DhDP(D)∂D
P(D) 是从分布 Pn 中取出数据集 D 的概率, h 是模型的加权平均。
3.2 期望测试误差的分解
我们可以对期望测试误差进行分解:
E(x,y)∼P,D∼Pn[(hD(x)−y)2]=∫D∫x∫y(hD(x)−y)2P(x,y) ∂y∂x∂D
分解过程如下:
Ex,y,D[(hD(x)−y)2]=Ex,y,D[(hD(x)−h(x)+h(x)−y)2]=Ex,D[(hD(x)−h(x))2]+2Ex,y,D[(hD(x)−h(x))(h(x)−y)]+Ex,y[(h(x)−y)2]
我们对第2项继续分解:
Ex,y,D[(hD(x)−h(x))(h(x)−y)]=Ex,y[(ED[hD(x)]−h(x))(h(x)−y)]∵ED[hD(x)]=h(x)∴Ex,y,D[(hD(x)−h(x))(h(x)−y)]=0
我们对第3项继续分解:
Ex,y[(h(x)−y)2]=Ex,y[(h(x)−y(x)+y(x)−y)2]=Ex[(h(x)−y(x))2]+2Ex,y[(h(x)−y(x))(y(x)−y)]+Ex,y[(y(x)−y)2]
继续分解:
Ex[(h(x)−y(x))(y(x)−y)]=Ey[(h(x)−y(x))(y(x)−Ey∣x[y])]∵Ey∣x[y]=y(x)∴Ex[(h(x)−y(x))(y(x)−y)]=0
综上可得:
Ex,y,D[(hD(x)−y)2]=Ex,D[(hD(x)−h(x))2]+Ex[(h(x)−y(x))2]+Ex,y[(y(x)−y)2]
其中:Variance为方差,Noise为噪声,Bias为偏差。
3.3 方差、偏差、噪声
①方差:它可以衡量我们用另一个训练集训练模型时,分类器的变化程度,如果存在最优分类器,则方差则衡量它离最优分类器有多远
②偏差:偏差是模型所固有的,它可以用来衡量分类器有多偏向于某个特定的方案
③噪声:噪声是数据所固有的,它可以用来衡量由于数据分布和特征表示而产生的歧义
如下图所示,假设靶心为我们所期望的最优模型的测试结果,利用不同的训练集 D 训练出的模型测试结果如各点分布,离靶心越近说明模型的偏差越小,测试的点越聚合说明模型的方差越小。
偏差和方差随模型复杂性的变化:由图可知模型越复杂,偏差越小,方差越大,因此我们需要对二者进行权衡
3.4 调试算法
此处我们讨论如何对机器学习算法进行调试:如果分类器性能不佳(例如,如果测试或训练误差过高)。有几种方法可以提高性能,要找出这些技术中哪一种适合这种情况,第一步是确定问题的根源。
如下图所示是训练误差和测试误差随着训练集大小的变化:
上图中有两个主要区域:
①Regime#1:训练误差低于期望的误差阈值 ε ,但是测试误差较高,出现过拟合
②Regime#2:训练误差和测试误差很接近,但二者都高于期望的误差阈值 ε
3.4.1 高方差
区域Regime#1所反映的问题是高方差所导致的,由于方差较高,导致训练出的模型与我们所期望的模型差距较大。
辨别高方差的方法为:
①训练误差低于测试误差 ②训练误差下小于 ε ,测试误差高于 ε
解决高方差的方法为:利用更多的训练实例、降低模型复杂度等
3.4.2 高偏差
区域Regime#2所反映的问题是高偏差所导致的,由于偏差较高,导致模型拟合的结果与我们所期望的结果差距较大。
辨别高偏差的方法为:训练误差大于 ε
解决高偏差的方法为:使用更复杂的模型、添加功能