关于交叉验证(Cross Validation)

在pattern recognition 与machine learning 的相关研究中, 经常会将dataset分为training跟 test这两个subsets, 前者用以建立model, 后者则用来评估该model 对未知样本进行预测时的精确度, 正规的说法是generalization ability. 在往下叙述之前, 这边就必须点出一个极为重要的观念: 只有training data才可以用在model的训练过程中, test data则必须在model完成之后才被用来评估 model 优劣的依据.  

怎么将完整的dataset分为training set与test set也是学问, 必须遵守两个要点:

     1. training set中样本数量必须够多, 一般至少大于总样本数的50%.  

     2. 两组子集必须从完整集合中均匀取样.  

其中第2点特别重要, 均匀取样的目的是希望减少training/test set与完整集合之间的偏差(bias), 但却也不易做到. 一般的作法是随机取样, 当样本数量足够时, 便可达到均匀取样的效果. 然而随机也正是此作法的盲点, 也是经常是可以在数据上做手脚的地方. 举例来说, 当辨识率不理想时, 便重新取样一组training set与test set, 直到test set的辨识率满意为止, 但严格来说这样便算是作弊了.  

Cross-validation 正是为了有效的估测generalization error所设计的实验方法, 可以细分为 double cross-validation, k-fold cross-validationleave-one-out cross-validation. Double cross-validation 也称2-fold cross-validation(2-CV), 作法是将dataset分成两个相等大小的 subsets, 进行两回合的分类器训练. 在第一回合中, 一个subset作为training set, 另一个便作为test set;在第二回合中, 则将training set 与test set对换后再次训练分类器, 而其中我们比较关心的是两次test sets 的辨识率. 不过在实务上2-CV并不常用, 主要原因是 training set 样本数太少, 通常不足以代表母体样本的分布, 导致test 阶段辨识率容易出现明显落差. 此外, 2-CV 中分 subset的变异度大, 往往无法达到「实验过程必须可以被复制」的要求. K-fold cross-validation (k-CV)则是double cross-validation的延伸, 作法是将dataset切成k个大小相等的subsets, 每个subset皆分别作为一次test set, 其余样本则作为training set, 因此一次 k-CV的实验共需要建立k个models, 并计算k次test sets的平均辨识率. 在实作上, k要够大才能使各回合中的training set样本数够多, 一般而言k=10算是相当足够了. 最后是 leave-one-out cross-validation (LOOCV), 假设dataset中有n个样本, 那LOOCV也就是n-CV, 意思是每个样本单独作为一次test set, 剩余n-1个样本则做为training set, 故一次LOOCV 共要建立n个models. 相较于前面介绍的 k-CV, LOOCV 有两个明显的优点:

      1. 每一回合中几乎所有的样本皆用于训练 model, 因此最接近母体样本的分布, 估测所得的 generalization error 比较可靠.  

  2. 实验过程中没有随机因素会影响实验数据, 确保实验过程是可以被复制的.

但 LOOCV 的缺点则是计算成本高, 因为需要建立的models数量与总样本数量相同, 当总样本数量相当多时, LOOCV在实作上便有困难, 除非每次训练model的速度很快, 或是可以用平行化计算减少计算所需的时间.

使用Cross-Validation时常犯的错误由于实验室许多研究都有用到evolutionary algorithms(EA)与classifiers, 所使用的fitness function中通常都有用到classifier的辨识率, 然而把cross-validation用错的案例还不少. 前面说过, 只有training data才可以用于model的建构, 所以只有 training data 的辨识率才可以用在fitness function 中. 而 EA 是训练过程用来调整model最佳参数的方法, 所以只有在EA结束演化后, model 参数已经固定了, 这时候才可以使用test data. 那EA跟cross-validation要如何搭配呢? Cross-validation的本质是用来估测(estimate)某个classification method对一组datasetgeneralization error, 不是用来设计 classifier的方法, 所以 cross-validation 不能用在 EA fitness function , 因为与 fitness function 有关的样本都属于 training set, 那试问哪些样本才是test set呢?如果某个 fitness function中用了cross-validation的training或test辨识率, 那么这样的实验方法已经不能称为 cross-validation 了.  

EA k-CV 正确的搭配方法, 是将dataset分成k等份的subsets后, 每次取1份subset作为test set, 其余k-1份作为training set, 并且将该组training set套用到EA的fitness function计算中(至于该training set如何进一步利用则没有限制). 因此, 正确的k-CV会进行共k次的 EA演化, 建立k个classifiers. 而k-CV的test辨识率, 则是k组test sets对应到EA训练所得的k个classifiers辨识率之平均值.

[本篇转自其他博友, 出处暂不详]

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>