机器学习模型的评估与选择

前言

  在上一篇文章中,我们主要了解了什么是机器学习,机器学习的范围,应用方式和一些常用的概念。在本文中,我们将来了解机器学习中模型的评估与选择。

概念引入

  先来明确几个概念:通常我们把分类错误的样本数占总样本总数的比例称为“错误率”,即如果在m个样本中有a个样本分类错误,则错误率E=a/m;对应的,1-a/m称为精度,即“精度=1-错误率”。学习器的预测输出和样本真实输出之间的差异称为误差,学习器在训练集上的误差称为训练误差或经验误差,学习器在新样本上的误差称为泛化误差。
  我们的目标是得到泛化误差小的学习器,但由于事先并不知道新样本是什么样,所以能做的是努力使经验误差最小。在很多情况下我们可以得到在训练集上精度很高的学习器,但这样的学习器在新样本上的表现并不如我们预期的那样,泛化性能极差,这种现象被称为过拟合。与过拟合对应的是欠拟合,即连训练样本的一般性质都没学好。
  针对这两种现象,欠拟合是比较容易克服的,因为欠拟合就是学习能力低下造成的,很多种方法都可以有好的效果,例如决策树学习中扩展分支,神经网络学习中增加训练轮数;但是过拟合就比较麻烦了,各类机器学习算法都有一定针对过拟合的措施,但过拟合是无法完全避免的,只能缓解。如果过拟合可以彻底被解决,这就意味着通过经验误差最小化就能获得最优解,相当于构造性的证明了“P=NP”。
  那么由于存在过拟合与欠拟合的情况,我们无法获得泛化误差,经验误差又不适合作为标准,那我们该如何进行模型评估与选择呢?

评估方法

  通常我们可通过测试实验来对学习器的泛化误差进行评估,使用“测试集”来测试学习器对新样本的判别能力,用测试误差来近似的表示泛化误差。测试样本同样也是从样本真实分布中独立同分布采样得来的,要注意的是测试样本需要尽可能和训练集互斥。这是为什么呢?举个例子,假设老师出了一套试题给学生练习,然后有一场考试试题和练习的一样,那能正确评估学生的水平吗?是不可以的,因为可能有的学生只会做这一套而能得高分。如果测试样本被用于训练,得到的结果会过于“乐观”。
  那我们只有一个数据集D,既要训练又要测试,如何做到呢?可以通过对D进行处理从中产生训练集S和测试集T,下面介绍几种常见的做法:

留出法

  留出法直接把数据集D划分成两个互斥集合S和T确保D=S∪T,S∩T=∅,使用S训练出模型后用T测试。采样过程中训练集和测试集需要保证数据分布的一致性,什么意思呢?就是说训练集和测试集中正反例的比例要一致。由于划分方式的不同产生的差异也是有的,所以留出法不能实验一次,通常是采用100次的随机划分,每次产生一个结果,留出法返回的是这100个结果的均值。此外如果训练集和测试集的量差异太大也会导致训练结果不理想,通常将数据集的2/3到4/5用于训练,其余样本用于测试。
机器学习模型的评估与选择

交叉验证法

  交叉验证法指的是现将数据集划分为k个大小相等且互斥的子集,每个子集都尽可能的保持数据分布的一致性,都从D中分层采样得到。将其中k-1个子集的并集作为训练集,剩下的一个子集作为测试集,图示如下。交叉验证法的稳定性和保真性很大程度上决定于k的取值,通常又叫k折交叉验证,常用取值k=10,交叉验证法也一样不能用一次实验的结果,需要重复p次取多次实验结果的均值。交叉验证法中有一种特殊情况就是当数据集中有m个样本,k的取值等于m的情况下,被称为留一法,即训练集只比数据集少一个样本,测试集只有一个样本,重复训练m次取均值。留一法的评估结果通常来说比较准,但是缺陷是计算开销太大而且留一法的估计结果未必永远比其他评估方法准确,NFL定理对实验评估方法同样有效。
机器学习模型的评估与选择

自助法

  我们期望的是用D训练出的模型,但是留出法和交叉验证法中都保留了一部分样本做测试,实际评估的模型训练集都比D小,这必然会引入估计偏差。留一法影响比较小,但计算规模有太大了,为解决这一类问题,自助法是比较好的。
  自助法指的是对D进行可重复采样,得到一个和D大小一致的数据集D’,假设样本数为m,根据概率,在采样完成后某个样本仍然没有没采样到的概率是
limn+(11m)m1e0.368\lim_{n \to +\infty} (1-\frac{1} m)^m→\frac{1}{e}≈0.368
即通过自助采样,D中有大概36.8%的样本没有出现在D’中,我们就可以使用D’作为训练集,D\D‘作为测试集。这样我们就有m个训练样本,同样留出了大约1/3的没有用于训练的样本测试。

总结

  自助法在数据集比较小时很有用但产生的数据集改变了初始数据集的分布,容易引入估计偏差,所以当初始数据量足够时还是选择留出法和交叉验证法。大多数学习算法都有参数需要设定,参数配置不同,学得的模型性能差异也会很大,在进行模型的评估和选择时,不仅要选择算法,还需要对算法参数进行设定,这就是“调参”。