模型的评估方法

评估方法

-通常情况下我们会使用一个测试集(testing set) 来测试模型在新的样本上面的泛化能力,然后将测试误差(testing error)作为泛化误差的近似。一般来说我们假设测试样本也是服从真实的样本中独立同分布采样而得到的,而且应该和训练集尽可能互斥,也就是说,在训练集上的样本应该尽量不要在测试集上面出现。

留出法(hold-out):

  • 直接将数据D划分成两个互斥的集合,其中一个集合作为训练集S,另外一个作为训练集T,S和T没有交集。在S上训练模型后,用T来评估其测试误差,进而估计泛化误差。
  • 需要注意的是,训练集和测试集的划分应该尽可能保持数据分布的一致性,避免因为划分过程中额外的偏差而对最终结果产生影响,就好比在分类任务中我们应该尽量保持类别的比例的一致性。在采用过程中我们可以通过”分层采样“的方式来保证数据的分布尽量相近。
  • 单次的留出法划分往往是不可靠的,因为学习器的性能一定程度上取决于所给的训练集,进而导致结果不稳定。在使用留出法的时候一般要进行若干次的随机划分,进行重复实验,然后取平均值作为评估结果。

交叉验证法(cross validation)

  • 把数据集D划分为k个大小相似(或者干脆相同)互斥子集,并且每个子集都尽可能地保持数据分布的一致性(但是实际情况下往往采用随机抽样的方法),然后取k-1个子集作为训练集,然后剩下的一个自己作为测试集。然后让每次训练都让另外一个子集充当测试集,那么就可以获得k组的训练/测试集,交叉验证法因此也叫做”k折交叉验证“(k-fold cross validation),比较长用的k取值是10,同时交叉验证法也是最常用的一种评估方法(至少对我来说)。

自助法(bootstrapping)

  • 由于在留出法和交叉验证法中会保留一部分样本用于测试,因此实际评估的模型所使用的训练集比D小,这样子会引入一些因为训练样本规模不同而导致的偏差。
  • 自助法是一个比较好的解决方案,它以直接采样法为基础,给定含有m个样本的数据集D,对其进行采样产生数据D’,每一次都从D中有放回地抽样一个样本(一个样本可能会被重复抽取到),作为D’,这样重复m次后就可以获得一个含有m个样本的数据集D’,D中部分的样本可能会在D’中重复出现,有些样本则不会在D中出现。我们不妨来计算一下 :)
    -含有m个样本的数据集中,抽取m次而始终没有被抽取到的概率为:

    也就是说,数据集D中仍然游大概 36.8% 的样本从来没有出现在采样数据集D’中,于是我们就可以用D’作为训练集,D\D’ 作为测试集。这种方法在数据集较小或者难以划分的时候很有用。

经验误差与过拟合

概念:

  • 在分类问题中,我们把分类错误的样本数占样本总数的比例成为“错误率”(error rate)。
  • 相对应的 1-(error rate)称为”精度“(accuracy)。
  • 我们把分类器/学习器的预测输出与样本的真实输出之间的差异称为”误差“(error),在训练集(training set)上的误差称为“训练误差”(training error)或者叫做”经验误差“(empirical error),在新的样本(我的理解是学习器在训练没有见过的样本)的误差称为”泛化误差“,显然我们是希望获得泛化误差比较小的学习器。
  • 我们往往能够在训练集中能获得精度非常高的结果,但是往往拿到测试集上进行测试的时候发现精度远远低于在训练集中的效果。通俗点理解,我们让它在训练集上训练得“太好了”,以致它过度“自信”,把训练集中的一些比较隐藏的特征特当作了整个数据集中普遍存在的特征。举个例子,就好比给用树叶去学习,恰好训练集的树叶都是有锯齿的,因此当它在训练集上训练得非常好的时候就会认为所以的叶子应该具有锯齿,拿到测试集上的时候它发现有些叶子并没有锯齿,它就非常果断地认为这些不是叶子。这样子就导致了模型的泛化性能下降,这一种现象在MachineLearning中成为”过拟合“.
  • 和过拟合恰恰相反,当模型并没有对训练样本中的一般性质学习好的时候,进而在训练集中泛化性能低下的现象称为”欠拟合“”,可以理解为我们平时所说的学渣。(比如我咯ˊ_>ˋ)

分析:

有多种原因会导致过拟合的现象。

  • 其中比较常见的情况就是学习能力过于强大,把一些不具有一般性的性质也给学习进去了。往往过拟合比较棘手难以解决
  • 欠拟合则通常是学习能力比较差导致的,欠拟合往往比较容易解决,比如在神经网络中增加每层神经元的数量或者层数,或者增加学习器的训练迭代次数。