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