西瓜书阅读笔记(机器学习周志华)D2 交叉验证法和自助法

交叉验证法

交叉验证法先把数据集 D D D划分成 k k k个大小相似的互斥子集 D = D 1 ∪ D 2 ∪ . . . . ∪ D k D=D_1\cup D_2\cup ....\cup D_k D=D1D2....Dk每个子集 D i D_i Di都尽量保证数据分布的一致性,所以我们从 D D D中进行分层采样,这样可以尽量保证所有自己数据分布一致。在使用的过程中,我们每次选择 k k k个子集中的 k − 1 k-1 k1个子集作为训练集,剩下的那个作为测试集。每个子集轮流当测试集,这样经过 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 (1m1)m,当 m m m趋近于 ∞ \infin 的时候,概率就趋近于 1 e \frac{1}{e} e1。所以,自助采样的时候,大约有36.8%的样本不会被采样到,所以这些剩下的样本我们将他们当作测试集。
这样有一个特点,就是测试集和训练集的样本数量是一样的,但是有接近1/3的样本不一样。我们把这样的测试结果称为“外包估计”。(out-of-bag estimate)
自助法在数据集较小,难以有效划分训练集和测试集的时候非常好用。而且自助法能产生多个不同的训练集,这对集成学习等方法很友好。但是自助法改变了原始数据集的分布,使得估计有偏差。
可见,没有免费的午餐定理在模型评估方法中依然适用

总结

评估方法总结:在数据集非常小的时候,留一法是最有效的。当数据量比较大的时候,留一法算法复杂度太高的时候,自助法很好用。当数据量非常庞大的时候,自助法改变了原有数据的分布,留一法开销不可承受,此时留出法和交叉验证法就派上用场了。但是以当今数据爆炸的情况来看,留出法和交叉验证法更加常用。

你可能感兴趣的:(学习总结,人工智能)