模型的评估方法

评估方法

-通常情况下我们会使用一个测试集(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’ 作为测试集。这种方法在数据集较小或者难以划分的时候很有用。