现实生活中,往往有很多种算法可供选择,甚至对于同一个学习算法,当使用不同的参数配置时,也会产生不同的模型。那么我们该选用哪一种算法,哪一种参数配置呢?
这就是机器学习中“模型选择”问题。理想的解决方案当然是对候选模型进行泛化误差进行评估,然后选择泛化误差最小的模型。然而,我们是无法直接获得泛化误差,而训练误差又存在过拟合现象,不适合作为标准,那么在实际中如何进行模型评估与选择呢?
通常我们可以通过实验测试来对学习器的泛化误差进行评估并作出选择。
对于只包含M个样例的数据集,即要训练又要测试,怎样才能做到呢?
答案是:通过对数据集进行处理,从而产生训练集S和测试集T。下面介绍几种常见的做法。
1、留出法(hold-out)
直接将数据集D划分为两个互斥的集合。
2、交叉验证法(cross validation)
将数据集D划分为K个大小相似的互斥子集,每次用K-1个子集的并集作为训练集,余下的子集作为测试集。
缺点比较:我们希望评估的是用D训练的模型。但在留出法和交叉验证法中,由于保留了一部分样本用于测试,因此实际评估的模型所使用的训练集比D小,这必然会引入一些因训练样本规模不同而导致的估计偏差。
3、自助法
“自助法”是针对上述缺点的一个比较好的解决方案,它直接以自助采样法为基础。给定包含m个样本的数据集D,我们对它进行采样产生数据集D’:每次随机从D中挑选一个样本,将其拷贝放入D’,然后再将该样本放回初始数据集D中,使得该样本在下次采样时仍有可能被采到;这个过程重复执行m次后,我们就得到了包含m个样本的数据集D’,这就是自助采样的结果。
于是我们可将D’用作训练集,D\D’用作测试集;这样,实际评估的模型与期望评估的模型都使用m个训练样本,而我们仍有数据总量约1/3的、没在训练集中出现的样本用于测试。