在机器学习中,通常把样本分为训练集和测试集,训练集用于训练模型,测试集用于评估模型。在样本划分和模型验证的过程中,存在着不同的抽样方法和验证方法。那么
(1)Holdout检验:
Holdout检验
是最简单也是最直接的验证方法,它将原始的样本集合随机划分成训练集
和验证集
两部分。
比方说,对于一个点击率预测模型,我们把样本按照70%~30%的比例分成两部分,70%的样本用于模型训练。30%用于模型验证,包括绘制ROC曲线,计算精确率和召回率等指标来评估模型性能。
Holdout检验的缺点很明显:即在验证集上计算出来的最后评估指标和原始分组有很大的关系。为了消除这个随机性,研究者引入了“交叉检验
”.
(2)交叉检验
k-fold交叉检验
:首先将全部样本划分成
k
k
k个大小相等的样本子集。依次遍历这
k
k
k个子集,每次把当前子集作为验证集,其余所有子集作为训练集,进行模型训练和评估。最后把
k
k
k次的评估指标的平均值作为最终的评估指标。在实际实验中,
k
k
k经常取值10。
留一验证
:每次留下1个样本作为验证集,其余所有样本作为训练集,样本总数为n,依此对n个样本进行遍历,进行n次验证,再将评估指标求平均值得到最终的评估指标。
在样本总数较多的情况下,留一验证法的时间开销极大。事实上,留一验证是留
p
p
p验证的特例,留
p
p
p验证是每次留下
p
p
p个样本作为验证集,从n个元素中选出
p
p
p个元素有
C
n
p
C_n^p
Cnp个可能,因此它的时间开销更是远远高于留一验证,所以很少使用。
(3)自助法
不管是Holdout检验还是交叉检验,都是基于划分 训练集 和 测试集 的方法进行模型评估的。然后,当样本规模比较小时,将样本集进行划分会让训练集进一步减小,这可能会影响模型训练效果。有没有能维持训练集合样本规模的验证方法呢?自助法可以比较好的解决这个问题;
自助法
基于自助采样法的检验方法。对于总数为n的样本集合,进行n次有放回的随机抽样,得到大小为n的训练集。n次采样过程中,有的样本会被重复采样,有的样本没有被抽取过,将这些没有被抽取过的样本作为验证集,进行模型验证,这就是自助法验证过程。
一个样本在一次抽样过程中未被抽中的概率为
(
1
−
1
n
)
(1-\frac{1}{n})
(1−n1),n次抽样均为抽中的概率为
(
1
−
1
n
)
n
(1-\frac{1}{n})^n
(1−n1)n。当n趋于无穷大时,概率为
lim
x
→
∞
(
1
−
1
n
)
n
\lim_{x \to \infty} (1-\frac{1}{n})^n
limx→∞(1−n1)n。根据重要极限:
lim
n
→
∞
(
1
+
1
n
)
n
=
e
\lim_{n\to \infty}(1+\frac{1}{n})^n=e
limn→∞(1+n1)n=e,所以有
lim
x
→
∞
(
1
−
1
n
)
n
=
lim
n
→
∞
(
n
−
1
n
)
n
=
lim
n
→
∞
(
1
n
n
−
1
)
n
=
lim
n
→
∞
1
(
1
+
1
n
−
1
)
n
=
1
lim
n
→
∞
(
1
+
1
n
−
1
)
n
−
1
⋅
1
lim
n
→
∞
(
1
+
1
n
−
1
)
=
1
e
≈
0.368
\lim_{x \to \infty} (1-\frac{1}{n})^n=\lim_{n \to \infty} (\frac{n-1}{n})^n=\lim_{n\to \infty}(\frac{1}{\frac{n}{n-1}})^n=\lim_{n \to \infty}\frac{1}{(1+\frac{1}{n-1})^n}=\frac{1}{\lim_{n\to \infty} (1+\frac{1}{n-1})^{n-1}}\cdot \frac{1}{\lim_{n\to \infty}(1+\frac{1}{n-1})}=\frac{1}{e}\approx 0.368
x→∞lim(1−n1)n=n→∞lim(nn−1)n=n→∞lim(n−1n1)n=n→∞lim(1+n−11)n1=limn→∞(1+n−11)n−11⋅limn→∞(1+n−11)1=e1≈0.368
因此,当样本数很大时,大约有36.8%
的样本从未被选择过,可作为验证集。
为了进行超参数调优,我们一般会采用网格搜索
、随机搜索
、贝叶斯优化
等算法。在具体介绍算法之前,需要明确超参数搜索算法一般包括哪几个要素。
(1)网格搜索
网格搜索可能是最简单、应用最广泛的超参数搜索算法。它通过查找搜索范围内的所有的点来确定最优值。如果采用较大的搜索范围以及较小的步长,网格搜索有很大概率找到全局最优值。然而,这种搜索方案十分消耗计算资源和时间,特别是需要调优的超参数比较多的时候。因此,在实际应用中,网格搜索法一般会先使用较广的搜索范围和较大的步长,来寻找全局最优值可能的位置;然后会逐渐缩小搜索范围和步长,来寻找更精确的最优值。这种操作方案可以降低所需的时间和计算量,但由于目标函数一般是非凸的,所以很可能会错过全局最优值。
(2)随机搜索
随机搜索的思想与网格搜索比较相似,只是不再测试上界和下界之间的所有值,而是在搜索范围中随机选取样本点。它的理论依据是:如果样本点集足够大,那么通过随机采样也能大概率地找到全局最优值,或其近似值。随机搜索一般会比网格搜索要快一些,但是和网格搜索的快速版一样,它的结果也是没法保证的。
(3)贝叶斯优化算法
贝叶斯优化算法在寻找最优最值参数时,采用了与网格搜索、随机搜索完全不同的方法。网格搜索和随机搜索在测试一个新点时,会忽略前一个点的信息;而贝叶斯优化算法则充分利用了之前的信息。贝叶斯优化算法通过对目标函数形状进行学习,找到使目标函数向全局最优值提升的参数。
具体来说,它学习目标函数形状的方法是
对于贝叶斯优化算法,有一个需要注意的地方,一旦找到了一个局部最优值,它会在该区域不断采样,所以很容易陷入局部最优值。为了弥补这个缺陷,贝叶斯优化算法会在探索和利用之间找到一个平衡点,“探索”就是在还未取样的区域获取采样点;而“利用”则是根据后验分布在最可能出现全局最值的区域进行采样。
在模型评估和调整的过程中,往往会遇到”过拟合“和”欠拟合“的情况。那么
过拟合是指模型对于训练数据拟合呈过当的情况,反映到评估指标上,就是模型在训练集上的表现很好,但在测试集和新数据上的表现较差。
欠拟合是指模型在训练和预测时表现都不好的情况,反映到评估指标上,就是模型在训练集和测试集上的表现都不好。
(1)降低“过拟合”风险的方法
(2)降低“欠拟合”风险的方法
[1] 《百面机器学习》第二章 模型评估