您的位置:首页 > 其它

[机器学习]划分训练集和测试集的方法

2017-05-02 00:33 281 查看
在进行机器学习常常需要处理的一个问题是划分测试集和训练集。训练集用于训练模型,测试集则是根据训练集的训练结果来评判最终的训练效果。一般而言,测试集应该和训练集尽可能保持互斥~常用的数据集划分方法有一下几种

方法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个样本的训练集。从未在训练集中出现的样本则作为测试样本放入测试集中。

需要注意的问题

自助法在数据集较小,难以有效划分训练集和测试集的时候比较有效。

自助法改变了原有数据的分布,这样会引入估计误差。

在数据量充足的时候尽量考虑用留出法或者交叉验证法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息