在进行机器学习常常需要处理的一个问题是划分测试集和训练集。训练集用于训练模型,测试集则是根据训练集的训练结果来评判最终的训练效果。一般而言,测试集应该和训练集尽可能保持互斥~常用的数据集划分方法有一下几种
方法1:留出法
直接将数据集D划分为两个互斥的集合。
需要注意的问题:
- 在划分的时候应该尽量保持数据分布的一致性。例如在分类任务中应该保持正负样本比例相近。
- 划分存在多种方法,为得到合理的算法模型评估标准,应该进行多次数据集的划分。得到每次划分的数据集上的评估结果,取平均值作为评判模型优劣的标准。
- 训练集不能太大:训练集太大会导致测试集偏小,评估的结果可能不太准确稳定。
- 测试集不能太大:测试集太大会导致训练集偏小,训练出来的模型可能会完整数据集所需要的模型产生较大的偏差。
方法2:交叉验证(cross-Validation)
该方法先将数据集D划分为k个大小相似的互斥子集,每个子集在划分的时候应该保持数据分布的一致性,即从D中分层采样得到。然后进行k次训练,每次训练将k-1个子集的并集作为训练集,余下的作为测试集。这种方法有被成为“k折交叉验证(k-fold cross-validation)”。如果D.size() == k, 则该方法又被成为留一法(leave-one-out 简称LOO)。
需要注意的问题
- 划分数据集同样存在多种方法,为得到合理值。应该进行多次交叉验证,取评价指标的平均值作为最后的结果。
方法3:自助法
直接以自主采样法为基础,从中有放回的采样执行m次,得到包含m个样本的训练集。从未在训练集中出现的样本则作为测试样本放入测试集中。
需要注意的问题
- 自助法在数据集较小,难以有效划分训练集和测试集的时候比较有效。
- 自助法改变了原有数据的分布,这样会引入估计误差。
- 在数据量充足的时候尽量考虑用留出法或者交叉验证法