在离线建模环节,需要对模型进行评估,这就需要对总样本进行划分,一部分用于训练,模型从训练集学习规则,一部分用于测试,检验模型的泛化能力。
下面介绍几种样本划分方法。
留出法
这种方法非常简单,但不能充分利用数据训练模型,而且样本划分对模型效果影响很大。
a. 只利用了部分数据训练模型,得到的模型很可能和全量数据D得到的模型偏差很大,训练集越小,偏差越大
b. 如果训练集较大,测试集较小,则模型可信度降低
c. 划分前后数据分布不同,比如总样本1500正1500负,划分后,测试样本50正950负,这显然会影响模型的效果。
样本集划分数量会导致模型偏差,通常做法是 2/3做训练集,1/3做测试集;
类别分布不同也会影响模型效果,可采用分层抽样的方法,特别是类别不均衡问题;
鉴于留出法的不确定性,可进行多次留出法实验,最终取平均值
适用场景:样本具有明显的时间序列因素
如 6月需要训练模型,可拿1-4月作为训练集,5月作为测试集
交叉验证
这是最常用的方法,老生常谈了,直接贴图片吧
交叉验证明显比留出法更复杂,
当k=2时,其仍不同于留出法,因为留出法是1个训练集,而交叉验证是2个训练集;
当k=n,n为样本数,此时测试集为一个样本,这称为留一法,(Leave-One-Out,LOO),
// 这种方法训练n个模型,每个模型基本用到全部数据,接近“真实”模型;
// 但是n很大时,其计算量太大;故n不能太大
另外,
交叉验证在处理类别不均衡问题时,也采用了分层采样的方式,即对每个类进行 k折划分;
由于交叉验证在划分时也带有随机性,可能产生不稳定现象,故可进行多次交叉验证;
自助法
自助法(bootstrapping) 以自主采样(bootstrap sampling)为基础,采用有放回重复抽样的方式构建训练集、测试集。
比如D中有m个样本,每次从中随机拿一个,存入训练集,然后放回D中,下次再从D中随机拿一个,存入训练集...最终产生m个样本的训练集;
当然训练集中可能有重复的样本,有些样本被多次选中,也有些样本从未被选中,没被选中的作为测试集;
m,取极限
也就是说测试集大概占总样本的0.368,大概1/3,
这种测试结果,称为“包外估计”
自助法在数据集较小,且难以有效划分训练/测试时很有用,而且自助法能从数据集中产生多个训练集,很适合集成学习,随机森林用的就是自助法;
自助法产生的训练集改变了数据分布,这会引入估计偏差;
所以在数据量足够时,优先选择 留出法和交叉验证。
最后需要注意一点,尽管我们在模型训练时用的部分样本,但是当经过测试集调试,模型参数固定时,需要重新在整个数据集上训练该模型,这个模型才是最终需要交付的模型。【请注意】