数据集 D = {(x1,y1),(x2,y2),...,(xm,ym)}, 一共 m 个样本. 可以对D 进行适当处理, 从中产生训练集 S 和测试集T. 下面介绍几种常见的做法.
将数据集 D 划分为两个互斥的集合, 其中一个作为训练集S, 另一个作为测试集T, 即 D=S∪T , S∩T=∅ . 训练集和测试集的划分要尽量保持数据分布的一致性, 至少要保证样本的类别比例相似。 另一个需要注意的问题是,在给定测试/训练集比例后, 仍然存在多种划分方式对数据集 D 进行分割, 不同的划分方式将导致不同的模型评估结果, 所以在使用Hold Out方法时,一般要采用若干次随机划分, 重复实验评估后取平均值作为评估结果。
将数据集D 划分为 k 个大小相似的互斥子集, 即 D=D1∪D2∪...∪Dk , D1∩D2∩...∩Dk=∅ , 然后, 每次用 k−1 个子集的并集作为训练集, 余下的那个子集作为测试集, 这样可以获得 k 组训练集和测试集, 从而进行k次训练和测试, 最终返回 k 个测试结果的均值。 跟Hold Out 方法类似, 将数据集D划分为 k 个子集也存在多种方式, 为减少因样本划分引入的差异, k次Cross Validation 通常要随机使用不同的划分重复 p 次。 常见的有10次10折Cross Validation.
给定m个样本的数据集 D , 对其进行采样, 每次随机挑选一个样本, 复制后将其放回,这样重复m次, 可以得到包含 m 个样本的测试集S, 显然, D 中会有一部分样本在 S中多次出现, 而有另一部分则不出现, 而样本在 m 次采样中部出现的概率为 p=(1−1m)m.
limm→∞(1−1m)m→1e≃0.368 于是我们可以定义 T=D∖S , 这样可以进行训练和测试。