数据集
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