交叉验证法
交叉验证法先把数据集
D
D
D划分成
k
k
k个大小相似的互斥子集
D
=
D
1
∪
D
2
∪
.
.
.
.
∪
D
k
D=D_1\cup D_2\cup ....\cup D_k
D=D1∪D2∪....∪Dk每个子集
D
i
D_i
Di都尽量保证数据分布的一致性,所以我们从
D
D
D中进行分层采样,这样可以尽量保证所有自己数据分布一致。在使用的过程中,我们每次选择
k
k
k个子集中的
k
−
1
k-1
k−1个子集作为训练集,剩下的那个作为测试集。每个子集轮流当测试集,这样经过
k
k
k次训练,就能得到
k
k
k个结果。然后我们对这
k
k
k个结果取均值,就得到了最终的模型评估结果。
交叉验证法的效果由于非常依赖
k
k
k值的选取,所以我们又把交叉验证法叫做
k
k
k折交叉验证(
k
k
k-fold cross validation),来强调
k
k
k的重要性。
当然,所有的评估方法都希望减少因样本划分不同而引起的差别,所以,
k
k
k折交叉验证一般会随机划分
p
p
p次,然后用这几次的均值来作为交叉验证法的结果。
交叉验证法的特例——留一法
当交叉验证集的子集个数 k k k等于样本个数的时候,大家可以发现,此时每一个子集只有一个样本。那么很明显,每个子集一个样本,根本不受随机样本划分的影响。但所以我们认为留一法的评估结果是比较准确的。但是样本量较大的时候,留一法的开销就不够经济了。
自助法
由于留出法和交叉验证法只用了一部分样本用于测试,所以必然会因为样本规模不同而导致估计偏差。但是留一法的计算开销太大了,所以学者提出了“自助法”,一个一自主采样法(bootstrap sampling)为基础的方法。
给定包含
m
m
m个样本的数据集
D
D
D,我们对他进行采样生成数据集
D
′
D'
D′“每次速记从
D
D
D中选一个样本,将其放入
D
′
D'
D′,然后再把这个样本放回
D
D
D中,这样的话这个样本可能会被重复选择。这就是自助采样。所以我们做一个简单的估算,样本在
m
m
m次采样中一次都不被选中的概率是
(
1
−
1
m
)
m
\left(1-\frac{1}{m}\right)^m
(1−m1)m,当
m
m
m趋近于
∞
\infin
∞的时候,概率就趋近于
1
e
\frac{1}{e}
e1。所以,自助采样的时候,大约有36.8%的样本不会被采样到,所以这些剩下的样本我们将他们当作测试集。
这样有一个特点,就是测试集和训练集的样本数量是一样的,但是有接近1/3的样本不一样。我们把这样的测试结果称为“外包估计”。(out-of-bag estimate)
自助法在数据集较小,难以有效划分训练集和测试集的时候非常好用。而且自助法能产生多个不同的训练集,这对集成学习等方法很友好。但是自助法改变了原始数据集的分布,使得估计有偏差。
可见,没有免费的午餐定理在模型评估方法中依然适用
总结
评估方法总结:在数据集非常小的时候,留一法是最有效的。当数据量比较大的时候,留一法算法复杂度太高的时候,自助法很好用。当数据量非常庞大的时候,自助法改变了原有数据的分布,留一法开销不可承受,此时留出法和交叉验证法就派上用场了。但是以当今数据爆炸的情况来看,留出法和交叉验证法更加常用。