- 参考:
- 西瓜书第二章
- 李航《统计学习方法(第二版)》第一章
- 现实任务中,往往有多种学习方法可供选择,对于同一个方法,使用不同的参数配置,也可以产生不同的模型。选择哪个模型(算法)、使用哪种参数配置,就是机器学习中的
模型选择 model selection
问题实践中常说的 “调参”,就是在做模型选择中确定参数配置这件事,更具体地说,是确定超参数
- 模型选择的关键是设计一个对比各个方法所得模型及其模型参数的规范流程,并利用它从假设空间中选出泛化能力最强的模型,形式化地讲是做以下两件事
- 确定
模型类型
(决策树、线性回归、神经网络…)· - 确定参数,包括
模型参数
和(算法)超参数
。这一步是模型选择的核心,而比较不同模型(即不同参数)的性能是这一步的核心,“比较” 方法进一步细化为三步- 设计模型性能的
评估方法
,本文主要介绍这个 - 设计性能的量化指标
性能度量
,下篇文章介绍 - 设计合适的比较方法,通常用数理统计中的
假设检验
方法,下篇文章介绍
- 设计模型性能的
- 确定
- 从宏观角度看,可以如下绘制概念关系图
文章目录
1. 调参与最终模型
- 确定模型类型后,一组模型参数就唯一地确定一个模型,调参(即选择最优参数)是模型选择的主要部分
1.1 超参数和模型参数
超参数
:超参数是算法本身的参数,需要由人工选择(或是人工指定范围后,使用网格搜索等遍历方式自动选定),会显著影响学得模型的性能,通常在10个以内模型参数
:模型参数是算法内部的参数,数量可能很多,由算法在学习/训练过程中自动调整(例如神经网络中连接的权重之类的)
1.2 调参
-
调参parameter tuning
一般指调整超参数 ,但其实两类参数的调节方法和思路类似,即:对所有可能的参数配置产生多个模型(构造假设空间),每种参数配置的模型都进行训练,然后把最好的模型参数作为结果- 对于
模型参数
而言,一旦模型确定,结合各参数取值范围,假设空间就确定了,学习方法利用统计学习策略,基于经验风险最小化
或结构风险最小化
进行自动调优。做一次模型参数调优就是完整训练一次,成本较低 - 对于
超参数
而言,需要人工设定多个候选值用以产生候选模型,通过网格搜索等手段,基于测试误差
进行调优。做一次超参数调优需完整训练多次(每一组超参数一次),成本很高
注:如果还要在不同方法间做对比,那么每个方法都要做一遍超参数调优,成本会非常高,因此很多论文中,对比方法都会直接使用原始论文推荐的超参数
- 对于
-
调节超参数时需要注意
- 由于很多超参数都是在一定的取值范围内的连续型变量,因此对每种参数配置都训练是不可能的
- 通常的做法是:对每个参数选择一个变化范围和步长,从而将参数的候选取值离散为有限个。这样选定的参数值显然不是最优的,但这是在计算开销和性能之间进行折中的结果。比如自动调参的网格搜索方法,就是在这个参数网格中搜索一组最优参数
- 事实上,即使进行了折中,调参过程仍然很困难,参数选择的好坏往往对最终性能有关键性影响
1.3 最终模型
- 在模型评估与选择的过程中,我们把数据集 D D D 做了划分,实际上只用了 D D D 的子集 S S S (训练集)进行训练。当学习算法和超参数设定都完成后,还应在整个 D D D 上重新训练一遍,作为最终提交的模型,最大程度地利用数据集
2. 模型选择方法
- 在之前的文章已说明过,统计学习三要素中的 “策略”(经验风险最小化、结构风险最小化)是选择最优模型时依据的准则,“模型选择” 其实就是统计学习要素 “策略” 的推广,包括以下两类方法
- 基于测试误差的方法: 模型类型、超参数未确定时,必须引入测试集和验证集,从最小化
测试误差
的角度做模型选择,通过网格搜索等方法确定模型的类型和超参数。这可以理解为 找出复杂度适当的模型,使其测试误差最小化,从而间接地保证其具有最佳泛化性能说白了就是使用不用参数训练得到很多模型,再基于一定的标准(详见第2节)选出最好的
- 基于 “策略” 的方法: 模型类型、超参数已确定时,可以单纯利用训练集,从最小化
经验风险/训练误差
的角度做模型选择,确定模型参数说白了就是直接训练一遍,这可以作为第一类方法的一部分
- 基于测试误差的方法: 模型类型、超参数未确定时,必须引入测试集和验证集,从最小化
2.1 基于 “策略” 的方法 —— 正则化
正则化
是结构风险最小化策略SRM
的实现,它是通过在经验风险最小化上增加一个正则化项regularizer/罚项penalty item
,使得优化后得到的模型的经验风险和复杂度同时小,以避免过拟合。结构风险最小化是一种机器学习策略,在统计学习三要素中策略部分已经介绍过,详见 机器学习基础(2)—— 统计学习方法三要素 第 2.2.2 节- 正则化一般具有以下形式
min f ∈ F 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ J ( f ) \min_{f\in\mathcal{F}} \frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i)) +\lambda J(f) f∈FminN1i=1∑NL(yi,f(xi))+λJ(f) 其中第一项是经验风险;第二项 J ( f ) J(f) J(f) 是正则化项,模型 f f f 越复杂, J ( f ) J(f) J(f) 就越大,对模型的惩罚程度就越大; λ ≥ 0 \lambda\geq 0 λ≥0 是权衡二者大小的系数 - 正则化项可以采取不同的形式
L2 正则化
:正则化项取为模型参数向量的 L 2 L_2 L2 范数,即
min f ∈ F 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ 2 ∣ ∣ w ∣ ∣ 2 \min_{f\in\mathcal{F}} \frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i)) +\frac{\lambda}{2} ||w||^2 f∈FminN1i=1∑NL(yi,f(xi))+2λ∣∣w∣∣2L1 正则化
:正则化项取为模型参数向量的 L 1 L_1 L1 范数,即
min f ∈ F 1 N ∑ i = 1 N L ( y i , f ( x i ) ) + λ ∣ ∣ w ∣ ∣ 1 \min_{f\in\mathcal{F}} \frac{1}{N}\sum_{i=1}^NL(y_i,f(x_i)) +\lambda ||w||_1 f∈FminN1i=1∑NL(yi,f(xi))+λ∣∣w∣∣1
- 理解正则化的两种视角
- 正则化利用了
奥卡姆剃刀原理
,模型选择问题中该原理告诉我们:能够很好地解释已知数据并且十分简单的模型是最好的模型 - 从贝叶斯估计的角度来看,正则化项可以理解为模型的先验概率, 可以假设复杂模型的先验概率较小;简单模型有较大的先验概率
- 正则化利用了
2.2 基于测试误差的方法
- 这类方法需要 “测试集” 来测试学习器对新样本的辨别能力,使用 “测试误差” 作为泛化误差的近似。通常假设测试样本和训练样本都是从真实样本分布中 i.i.d 采样得到的,并且测试集应尽量与训练集互斥,以免得到过于乐观的估计结果。一般步骤如下
- 收集含
m
m
m 个样例的数据集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}
D={(x1,y1),(x2,y2),...,(xm,ym)},对其进行适当处理以以划分得到训练集
S
S
S 和测试集
T
T
T
- 划分完成后,使用 1.1 节的调参方法优化模型参数,选出最终模型
- 收集含
m
m
m 个样例的数据集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
,
(
x
m
,
y
m
)
}
D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}
D={(x1,y1),(x2,y2),...,(xm,ym)},对其进行适当处理以以划分得到训练集
S
S
S 和测试集
T
T
T
- 下面介绍几种常见的测试集和训练集的划分方法
2.2.1 留出法(hold-out)
留出法
:直接把数据集 D D D 划分为训练集 S S S 和测试集 T T T 两个互斥的集合,即
D = S ∪ T S ∩ T = ∅ D = S \cup T\\ S \cap T=\varnothing D=S∪TS∩T=∅- 注意:
- 训练集和测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外偏差而对最终结果产生影响。比如在分类任务中至少要保持样本的类别比例相似,从采样角度看,这种方式称为
分层采样stratified sampling
。如果 D D D 中包含500个正例和500个反例,则分层出的 S S S 和 T T T 中正例反例数量也应相同 - 在给定训练/测试集比例后,扔有许多方式对数据集 D D D 进行划分,不同的划分方式会导致不同的评估结果。因此,单次使用留出法时,一般要使用若干次随机划分、重复进行实验评估后取均值作为留出法的评估结果(同时得到方差)
- 通常将约 2 3 ∼ 4 5 \frac{2}{3} \sim \frac{4}{5} 32∼54 的样本用于训练,剩余的用于测试
- 训练集和测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入额外偏差而对最终结果产生影响。比如在分类任务中至少要保持样本的类别比例相似,从采样角度看,这种方式称为
- 优点:
- 思路直接,实现简单
- 缺点:
-
从 “偏差-方差” 角度看,测试集 T T T 较小时,评估结果方差较大,偏差较小;测试集 T T T 较大时,评估结果方差较小,偏差较大
具体来说,数据集 D D D 的大小有限, S S S 越大 T T T 就越小,反之亦然。若 S S S 大一些,训练出的模型会更接近用整个 D D D 训练的模型,但由于 T T T 小,评估结果较不准确;若 T T T 大一些,评估结果会相对准确,但训练模型会更和用整个 D D D 训练的模型偏差较大。
-
2.2.2 交叉验证法(cross validation)
k折交叉验证
:按照以下流程进行 k k k 次训练和测试- 先将数据集
D
D
D 使用分层采样划分为
k
k
k 个大小相似的互斥子集,每个子集中的数据分布尽量和
D
D
D 保持一致,即
D = D 1 ∪ D 2 ∪ . . . ∪ D k D i ∩ D j = ∅ ( i ≠ j ) \begin{aligned} &D = D_1 \cup D_2 \cup...\cup D_k\\ &D_i \cap D_j = \varnothing (i\neq j) \end{aligned} D=D1∪D2∪...∪DkDi∩Dj=∅(i=j) - 然后每次使用
k
−
1
k-1
k−1 个子集进行训练,余下的作为测试集,从而可以进行
k
k
k 次训练和测试,一次
k
k
k折交叉验证的评估结果是这
k
k
k 次评估结果的均值
- 先将数据集
D
D
D 使用分层采样划分为
k
k
k 个大小相似的互斥子集,每个子集中的数据分布尽量和
D
D
D 保持一致,即
- 注意:
- 交叉验证法评估结果的稳定性和保真性很大程度取决于 k k k 的取值, k k k 最常用的取值是10,其他还有5、20等
- 和留出法一样,将
D
D
D 划分为
k
k
k 个子集时存在多种划分方式,为了减小划分时引入的偏差,
k
k
k折交叉验证通常需要随机使用不同的划分方法
p
p
p 次,最终结果为这
p
p
p次
k
k
k折交叉验证结果的均值。称为
p次k折交叉验证
- 优点:
- 通过取均值减小了划分引入的偏差,通常比普通的留出法评估得更准确
- 缺点:
- 需要多次训练,计算开销比留出法高
2.2.3 留一法(Leave-One-Out)
留一法
:留一法是一种特殊的交叉验证法,其划分的每个 D D D 的子集中仅有一个样本。- 优点:
- 由于仅有一种划分方式,留一法不会因随机划分方式引入偏差
- 由于使用的训练集相比 D D D 只少了一个样本,绝大多数情况下训练出的模型与用完整 D D D 训练出的模型很相似,因此评估结果比较准确(方差较小)
- 缺点:
- 需要训练的模型太多,计算开销太大
- 即使在付出巨大开销的情况下,留一法也不一定永远比其他评估方法准确,“没有免费的午餐” 定理对实验评估方法仍然适用
2.2.4 自助法(bootstrapping)
-
自助法
:给定包含 m m m 个样本的数据集 D D D,每次有放回地从 D D D 中随机挑选一个样本放入 D ′ D' D′,直到 D ′ D' D′ 中也有 m m m 个样本为止,将 D ′ D' D′ 作为训练集 S S S, D − D ‘ D-D^‘ D−D‘ 作为测试集 T T T -
注意:
- 某个样本在
m
m
m 次采样中始终不被取样到的概率为
(
1
−
1
m
)
m
(1-\frac{1}{m})^m
(1−m1)m,取极限有
lim m → ∞ ( 1 − 1 m ) m = 1 e ≈ 0.368 \lim\limits_{m\to\infin}(1-\frac{1}{m})^m = \frac{1}{e} \approx 0.368 m→∞lim(1−m1)m=e1≈0.368 因此采样完成后,约 63.2% 的数据出现在 D ′ D' D′ 中
- 某个样本在
m
m
m 次采样中始终不被取样到的概率为
(
1
−
1
m
)
m
(1-\frac{1}{m})^m
(1−m1)m,取极限有
-
优点
- 训练集大小和原始数据集相同的情况下,仍保留有约 1 3 \frac{1}{3} 31 的样本用于测试,在数据集较小、难以有效划分训练/测试集的情况下很有用
- 自助法能从初始数据集中生成多个不同训练集,对集成学习有很大好处
-
缺点:
- 自助法产生的训练集 S S S 的数据分布和原始数据集 D D D 不同,会引入估计偏差,故在初始数据量足够时不常用此方法