在离线建模环节,需要对模型进行评估,这就需要对总样本进行划分,一部分用于训练,模型从训练集学习规则,一部分用于测试,检验模型的泛化能力。

下面介绍几种样本划分方法。

 

留出法

方法:将样本集 D 分成两个互斥的样本集合,训练集为S,测试集为T,S∩T=Ø,SUT=D

这种方法非常简单,但不能充分利用数据训练模型,而且样本划分对模型效果影响很大。

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次采样中从未被选中的概率为  (1-1/m)m,取极限

  // 从未被选中的 对立事件 是 至少被选中一次,m次中至少选中一次的概率是 1/m,那从未被选中的概率就是 1-1/m

也就是说测试集大概占总样本的0.368,大概1/3,

这种测试结果,称为“包外估计

 

自助法在数据集较小,且难以有效划分训练/测试时很有用,而且自助法能从数据集中产生多个训练集,很适合集成学习,随机森林用的就是自助法;

自助法产生的训练集改变了数据分布,这会引入估计偏差;

所以在数据量足够时,优先选择 留出法和交叉验证。

 

 

最后需要注意一点,尽管我们在模型训练时用的部分样本,但是当经过测试集调试,模型参数固定时,需要重新在整个数据集上训练该模型,这个模型才是最终需要交付的模型。【请注意】

当然 通常我们只在 训练集上 训练完就交付了,也是可以的,因为默认数据量很大,训练集可以代表全部数据