交叉验证的理解

在 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-validation 与
leave-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 有两个明显的优点: 
     每一回合中几乎所有的样本皆用于训练 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。 
那 EA 跟 cross-validation 要如何搭配呢?Cross-validation 的本质是用来估
测(estimate)某个 classification method 对一组 dataset 的 generalization 
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 辨识率之平均值。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值