一、前戏

在将数据集划分为训练集和测试集时,测试样本应从真实分布中独立同分布采样获得;同时测试集应该尽可能与训练集互斥,也就是测试样本尽量不要在训练集中出现、未在训练过程中使用过。

多数情况下采用留出法(hold-out),即从数据集中分层采样(stratified sampling)出约30%的数据作为测试集。分层采样的目的是要保持数据分布的一致性,避免划分过程引入额外的偏差。

在留出法中因为保留一部分样本用于测试了,导致训练的样本就少了。数据集的规模大点还好,当数据集比较少时,这样划分的方法就会浪费宝贵的数据资源。所以有什么方法能避免训练样本减少的影响,同时还能比较高效测试模型训练的好坏呢?


二、正题

“自助法”(bootstrapping)以自助采样(可重复采样、有放回采样)为基础。

假如一个数据集D有m个样本,看看训练集和测试集怎么选择:

  • 训练集D':每次从数据集D中随机选择一个样本,将这个样本复制一个放到D'中,然后再把原样本放回去(可放回)。重复操作m次。这样D'中就有m个样本了。这种采样方法有可能一个样本会被选择好多次,也有可能有的样本一次也不会被选择到。
  • 测试集D-D':测试集就是那些剩下的,没被选择的样本。

那么训练集D和测试集D'中共有多少数据呢?

可以看出数据集中样本在m次始终不被采样到的概率是(1-\frac{1}{m})^{m},取极限得:

                                            \lim_{m\rightarrow \propto }(1-\frac{1}{m})^{m}=\frac{1}{e}\approx 0.368

所以数据集D中有36.8%的样本未出现在训练集中。

优缺点:

  • 数据集小、难以划分训练\测试集
  • 自助法能从初始数据集中产生多个不同的训练集,可以用于集成学习
  • 自助法产生的训练集改变了初始数据集的分布,会引入估计偏差

 

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐