在数据探索性分析场景下,用户倾向于假设用户的历史记录能很好地表征未来的情况,从而针对特定的要求生成特定的抽样策略。机器学习中,经常遇到数据集划分的工作(现在很多框架都提供API),数据集划分具有一个基本准则:保持训练集和验证集之间的互斥性,即测试样本尽量不在训练样本中出现,以保证验证集上的表现能代表模型的泛化能力。
训练集:帮助训练模型,通过训练集的数据确定拟合曲线的参数。
测试集:为了测试已经训练好的模型的精度,利用相似的数据用此模型会得出相似的结果。
留出法
直接将数据集D划分为两个互斥的集合,其中一个集合作为训练集S,另一个集合作为测试集T。
训练集和测试集的划分要尽可能保持数据分布的一致性,避免因数据划分过程引入的额外的偏差而对最终结果产生影响。例如,在分类任务中,至少要保证样本的类别比例相似(分层采样)。
例如从1000个数据中,分层采样获得70%样本的训练集S和30%样本的测试集T,若D包含500个正例,500个反例,则分层采样得到的S应包含350个正例,350个反例,T应包含150个正例,150个反例。
在用留出法划分集合时需要注意进行若干次随机划分、重复实验评估后取平均值作为留出法的评估结果,避免单次使用留出法存在不稳定情形,减少误差。
留出法还需要关注训练集和测试集的比例划分。如果训练集的比例过大,可能会导致训练出的模型更接近于用总样本训练出的模型,同时测试集较小,评价结果又不够准确;若测试集的比例比较大,则有可能导致评估的模型与之前有较大的差别,从而降低了评估的抱枕行。常用划分比例: 7:3 、7.5:2.5 、8:2。
交叉验证法
先将样本集划分为k个大小相似的互斥子集,每个子集都尽可能保持数据分布的一致性,即从样本集中通过分层采样得到。然后,每次用k-1个子集的并集作为训练集,余下的子集作为测试集;这样就可以获得k组训练集/测试集,从而可以进行k次训练和测试,最终返回的是k个测试结果的均值。显然,交叉验证法评估结果的稳定性和保真性在很大程度上取决于k的取值,k通常取10-10折交叉验证。
交叉验证的好处就是从有限的数据中尽可能挖掘多的信息,从各种角度学习现有的有限数据,避免出现局部的极值。缺点是,当数据集比较大时,训练模型的开销较大。
自助法
样本集包含m个样本,通过采样产生训练集,具体方法(有放回):
1.每次随机从样本集中选一个样本,拷贝加入训练集中,再将该样本放回原样本集,使得这个样本下次还有可能被采集到。
2.重复上述过程m次,我们就得到一个包含m个样本的训练集
3.剩下的样本作为测试集
自助法在样本集较小、难以有效划分训练/测试集时很有用。此外,自助法从初始样本集中产生多个不同的训练集,这对集成学习等方法很有用。然而,自助法产生的训练集改变了初始样本集的分布,会引入估计误差。
网友评论