机器学习——模型选择和评估方法

一. 模型选择

通常我们在机器学习的过程中希望能够通过实验测试来对学习器的泛化误差进行评估,就需要测试集来作为学习结果的依据。那么给了一个数据集D,如何划分训练集和测试集呢?

1. 留出法(hold-out)

直接将数据集D划分为两个互斥集合S和T,即D=S \cup T, S\cap T=\varnothing, 然后在S上训练网模型后,用T 来做测试。

2. 交叉验证法(cross validation)

现将数据集D划分为k个大小相似的互斥子集,即D=D_1\cup D_2\cup ...\cup D_k, D_i \cap D_j = \varnothing(i\neq j).每个子集D_i尽可能保持数据分布的一致性,即从D中通过分层采样得到。然后每次利用k-1个数据集做训练,余下的子集做测试。这样就可以获得k组训练集和测试集,从而得到k次测试结果,最后返回k次测试的均值。k最常用的取值为10.

如果数据集D中包含m个样本,若令m=k, 则交叉验证变为留一法(leave-one-out)

留一法优点:1.不受随机样本划分的影响。

                      2.由于训练集S和数据集D只差了一个集合,因此训练模型与原始模型很相似

         缺陷:  对于大数据集的情形,训练m个模型的训练开销很难忍受的,而且这里还未考虑算法调参的问题。

3. 自助法

以自助采样法为基础,给定包含m个样本的数据集D,采样的数据集 D^', 每次随机从D中挑选一个样本送入D^',然后再把这个样本复制到原始数据D中,确保这个样本在下次采样中仍可以采集到。这样重复m次,得到了包含m个样本的数据集D^'。这样可能会使得D中的一部分样本会在D^'中重复出现,另一部分不出现。做一个估计

                                                          \lim_{m\rightarrow \infty }(1-\frac{1}{m})^m \mapsto \frac{1}{e} \approx 0.368

也就是说通过自助采样,原始数据集D越有36.8%的样本未出现在D^'中。我们用D^'做训练集,用D \setminus D^'作为测试集。这样的测试称为“包外估计”(out-of-bag estimate)

自助法对于数据集较小、难以划分训练/测试集的样本有效。由于会产生多种不同的训练集,因此也对集成学习等方法有很大的好处。但是由于改变了原始数据集的分布,会带来估计偏差。

因此无论选用哪种模型选择的方法,最终还是需要一些参数设定,牵扯到调参的问题,只有参数调整准确,才能得到最终的模型。这时候需要对训练数据做一个划分,一部分数据作为训练数据,一部分数据作为验证集,基于验证集上的性能来进行调参和确定模型。

猜你喜欢

转载自blog.csdn.net/xieedun9158/article/details/81629256