如何使用交叉验证(cross-validatation)



    如何使用Cross-Validation写这份文件,最主要的目的是介绍如何正确的使用cross-validation,并举例一些常犯的错误。假设您对pattern recognition已经有基础的认识,希望这份文件对您论文中的实验内容能有所帮助。 

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

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

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

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

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

    Cross-validation正是为了有效的估测generalization error所设计的实验方法,可以细分为double cross-validationk-fold cross-validationleave-one-out cross-validationDouble cross-validation也称2-fold cross-validation(2-CV),作法是将dataset分成两个相等大小的subsets,进行两回合的分类器训练。在第一回合中,一个subset作为training set,另一个便作为test set;在第二回合中,则将training settest 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的实验共需要建立kmodels,并计算ktest sets的平均辨识率在实作上,k要够大才能使各回合中的training set样本数够多,一般而言k=10算是相当足够了。

    最后是leave-one-out cross-validation (LOOCV),假设dataset中有n个样本,那LOOCV也就是n-CV意思是每个样本单独作为一次test set,剩余n-1个样本则做为training set故一次LOOCV共要建立nmodels。相较于前面介绍的k-CVLOOCV有两个明显的优点:

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

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

    但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

    那EAcross-validation要如何搭配呢?Cross-validation的本质是用来估测(estimate)某个classification method对一组datasetgeneralization error,不是用来设计classifier的方法,所以cross-validation不能用在EAfitness function中,因为与fitness function有关的样本都属于training set,那试问哪些样本才是test set呢?如果某个fitness function中用了cross-validationtrainingtest辨识率,那么这样的实验方法已经不能称为cross-validation了。

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

你可能感兴趣的:(机器学习)