\(1.\)经验误差和过拟合
通常将分类错误的样本数占样本总数的比例称为“错误率”\((error rate)\),假设样本总数为\(m\),分类错误的样本为\(a\),则错误率可表示为\(E=a/m\);相应的通常将分类正确的样本数占样本总数的比例称为“精度”\((accuracy)\),记为\(1-a/m\)。
显然,通常希望得到泛化误差最小的学习器,然而,大多数时候我们事先并不知道新样本是什么样,实际能做的是努力使经验误差最小化。
实际上,很多情况下我们可以得到一个训练误差很小的学习器,甚至对所有的训练样本都能正确分类,分类错误为\(0\),精度为\(100\%\),但是往往大多数时候这种学习器并不好。
我们实际需要的是一个在新样本上能够表现很好的学习器,为了达到这个目的,应该是从训练样本中尽可能学出适用于全部潜在样本的“普遍规律”,并非仅仅只针对训练样本的精确样本规律,这才能对新样本做出正确的判别。当学习器把训练样本学的太过了的时候,可能已经把特定训练样本本身的独有特点当作了全部潜在样本的特征,导致泛化能力的下降,这种现象被称为“过拟合”\((overfitting)\),相对而言,“欠拟合”\((underfitting)\)指对训练样本的一般性质尚未学习好。
举个例子,训练树叶图像识别时,过拟合情况下会在识别树叶时认为新叶子不属于树叶,而欠拟合会认为绿色片状物都是树叶。
导致过拟合的因素有很多,最常见的情况是学习能力过于强大,以至于把训练样本所包含的不太一般的特性都学习到了,而欠拟合通常是由于学习能力过于低下造成的。欠拟合比较容易解决,如在决策树上添加分支增强学习能力,而过拟合则比较麻烦。过拟合是机器学习面临的关键障碍,然而各类算法中,过拟合不可避免地存在,我们能做的只是缓解过拟合风险。机器学习面临的问题通常是\(NP\)难甚至更难,而有效的学习算法必然是在多项式时间内运行完成,通过经验误差最小化就能获得最优解,这就意味着我们构造性的证明了\("P=NP"\),因此只要相信\("P!=NP"\),过拟合就不可避免。
\(2.\)评估方法
通常需要一个测试集对学习器的泛化误差进行评估,以测试集上的测试误差作为泛化误差的近似,我们假设训练集是从样本真实分布中独立同分布采样得到,测试集应尽可能与训练集互斥。
通常情况下我们只有一个包含\(m\)个数据的数据集\(D=\{(x_1,y_1),(x_2,y_2),...,(x_m,y_m)\}\),此时数据集既要训练又要测试,做法是将数据集\(D\)分为训练集\(S\)和测试集\(T\)。
\(2.1.\)留出法\((hold-out)\)
留出法直接将数据集\(D\)划分为两个互斥的集合,其中一个作为训练集\(S\),另一个作为测试集\(T\)。
需要注意的是,训练集和测试集的划分尽可能保持数据分布的一致性,避免因数据划分引入额外的偏差而对最终结果产生影响。从采样角度来看则保留类别比例的采样方法通常为分层采样。
另一个需要注意的是,单次使用留出法得到的估计结果往往不够稳定可靠,在使用留出法时,一般要采用若干次随即划分、重复进行实验评估后取平均值作为留出法的评估结果。
留出法有个尴尬点,就是训练集和测试集的比例问题,训练集多测试结果不准确,测试集多训练误差大,该问题没有解决方案,最常见的做法是将\(2/3-4/5\)的样本用于训练。
\(2.2.\)交叉验证法\((cross \; validation)\)
交叉验证法又称\(k\)折交叉验证,通过将数据集\(D\)分为\(k\)个大小相似、分布一致的数据集,留下一个作为测试集,剩下的\(k-1\)个作为训练集,通常需要进行\(p\)次\(k\)折交叉检验,常见的有\(10\)次\(10\)折检验。
当划分子集个数\(k\)和数据集样本数\(m\)相等时,得到了交叉验证法的特例:留一法。留一法不受采样方式的影响,留一法的训练集和初始数据集只差了一个样本,评估结果往往被认为比较准确。然而,留一法在数据集较大时的计算开销难以让人忍受,另外,留一法未必比其他评估方法更为准确。
\(2.3.\)自助法\((bootstrapping)\)
在留出法和交叉验证法中,一部分样本被保留在测试集,则训练集并非数据集\(D\),我们希望评估的是数据集\(D\)训练出的模型,这必然会引入一些估计偏差,留一法的计算复杂度又太高,我们寻找一种方法既可以减少训练样本规模不同造成的影响,同时还能比较高效的进行实验估计,自助法对此是一个比较好的方法。
自助法的核心思想在于,对数据集\(D\)进行有放回抽样,执行\(m\)次获得数据集\(D'\),每个样本可能被多次采样到,这就是自助采样的结果。
样本在\(m\)次采样中不被抽到的概率为:
通过自主采样,我们有大约\(36.8\%\)的样本未出现在采样数据集\(D'\)中,于是可以将\(D'\)作为训练集,\(D\)\\(D'\)作为测试集。用于训练的样本数目为\(m\),没在训练集中出现、占数据集\(1/3\)数目的样本用于测试,这样的测试结果,称为“外包估计”\((out-of-bag \; estimate)\)。
优点:自助法在数据集较小、难以划分训练和测试集时很有效果,此外,自助法可以从初始数据集中产生多个不同的训练集,这对集成学习方法有很大的好处。
缺点:自助法产生的数据集改变了初始数据集的分布,这回引入估计误差,因此,当数据足够用时,留出法和交叉验证法更常用一些。
\(2.4.\)调参与最终模型\((bootstrapping)\)
大多数学习算法都有参数\((parameter)\)需要设定,参数配置不同,学得模型性能往往有显著区别。因此,在进行模型评估与选择时,除了要对使适用学习算法进行选择,还需要对算法参数进行调整,这就是常说的“参数调节”或“调参”\((parameter \; tuning)\)。
另外需要注意的是,通常把学得模型在实际使用中遇到的数据称为测试数据,模型评估与选择中用于评估测试的数据成为验证集\((validation \; set)\)。例如,在研究对比不同的算法泛化能力时,我们用测试集上的判别效果来估计模型在实际使用时的泛化能力,而把训练数据另外划分为训练集和验证集,基于验证集上的性能来进行模型选择和调参。