机器学习测试集选择方法
目前来说总共有三种测试集选择方法:
- 留出法
- 交叉验证法
- 自助法
以下分别对三种方法进行讨论
本文约定如下:
D :代表数据集
S :代表训练集
T :代表测试集
留出法
留出法的原理相对简单, 就是从数据集-D中选择一部分出来作为训练集-S,剩下的一部分作为测试集-T
需要注意的事项:
在选择测试集与训练集的时候双方并没有存在交集, 并且需要保证它们的数据分布性存在一致性
比如: 数据集中有100个正例,50个负例,那么我们就需要保证测试集与训练集中的正例负例比例应该是2:1的状态.
目前测试集选择的比例在于: 20% -> 35%之间
多次留出法选择
在单次流出法的选择中,为了防止数据分布不一致的情况和出现训练特例的情况, 一般的做法是进行多次随机的选择,然后将多次训练得到结果平均.
实际上很难实现完全的数据分布一致,因为对于数据特征的处理,在训练初始很容易会出现某些特征被忽略, 因此我们可以引入多次留出.
交叉验证法
交叉验证法实际上与留出法类似, 他将数据集D分为N份,每份之间仍然需要尽量保有一致的数据分布,如下图(来源西瓜书)
如上, 通过多次的交叉训练选择最终可以生成一个测试结果,显然这种选择方式要比留出法要更好.
同时我们也可以进行多次的数据集划分,获得多次的结果.
一般把数据划为K份的数据集我们称为K折验证法, 交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值
留一法交叉验证
留一验证法的原理相当于把D数据集做最小化的划分, 即每一个数据都是最小单元, 这样的好处在于可以最小化的损失训练集(每次训练都只缺少一个数据).
但是也引入新的问题,当数据量较大的时候, 我们需要训练很多次,比如数据量为1000w,那我们就要训练1000w个数据, 这显然是不合理的.
自助法
给定包含m个样本的数据集D,我们对它进行采样产生数据集D’:每次从D中挑选一个样本,将其放入D’,然后再将该样本放回初始数据集D中;这个过程重复执行m次后,我们就得到了包含m个样本的数据集D’,取极限之后, 就会发现大概有0.368的数据没有被选入D’, 数据推到如下(图片来源西瓜书)
总结
自助法在数据集较小、难以有效划分训练/测试集时比较有用。然而自助法产生的测试集改变了初始数据集的分布,这会引入误差.
因此在数据集比较大时,采用留出法和交叉验证法较好。