最近闲下来了,打算系统性的来学习一下机器学习的相关理论。然后买来周志华老师的机器学习书,将自己学习过程记录下来。
我们常常需要对自己使用的模型的泛化能力进行测试,这里就涉及到使用怎样的数据集进行测试才能更好地反应模型的效果。下面记录一下常用的三种方法:
1.留出法
2.交叉验证法
3.自助法
假设一个数据集D中共有m个样例,n个类别,每个类别有p个样例,m=n*p。我们将从D中获得的训练集成为S,测试集称为T。
1.留出法(按照一定比例直接划分训练集和测试集)
方法概述:从D中的每个类别中取出一定比例的样例作为训练数据集,余下的作为测试数据集。
如下图所示:一般训练集所占比例为2/3~4/5之间。
注意
1)数据集和训练集的分布尽量保持一致,避免引入额外的误差,影响结果。
2)即使在数据集D中取一定比例的样本作为训练集个测试集,选取的方法还是多种多样的。例如选择某种排序下的前一部分或者后一部分,结果很有可能就不一样。因此单次使用留出法时估计结果会不够稳定可靠,需要多次随机选取,最后取平均值。
2.交叉验证法(数据集分层采样等分k份,交叉取出k-1份进行训练)
将样本按照分层采样方法(不同种类取等比例样本)分成K等份,然后任取一份作为测试集,其余作为训练集。这样可以取k次,也就生成了k次训练集和测试集,最终可以返回k个测试结果,取平均值即可。由于最终的结果与k值有很大的关系,因此此方法又称为k折交叉验证法,k常取5,10,20.
3.自助法(从数据集中重复取出和原始数据集一样数量的数据,进行训练,其余测试)
假设共有m个样例,放回式随机进行m次抽样。这样就可以抽取一个与样本大小一样的训练集了,但是由于随机放回抽样,会导致原有样本多次出现在新的训练集中,会在一定程度上改变初始数据的分布,引入估计误差。但是在数据小,难以有效划分出训练集和测试集时还是很有用出的。根据统计计算进行m次抽样,大概D中会有36.8%数据被抽取,则其余数据作为测试集。
才开始学习机器学习,如有不恰当之处还请多多指教!