交叉验证(Cross-Validation)
交叉验证也叫做循环验证,是用来验证分类器性能的一种统计分析方法,它也用来分析机器学习算法的泛化能力(Generalization)。
其基本思想是把在某种意义下将原始数据(Dataset)进行分组,一部分做为训练集(Train Set),另一部分做为验证集(Validation Set or Test Set),首先用训练集对分类器进行训练,在利用验证集来测试训练得到的模型(Model),以此来做为评价分类器的性能指标。
数据集分割原则
交叉验证在原始数据集分割为训练集和测试集时,必须遵循两个要点。
1.训练集中样本数量必须够多,一般至少大于总样本的50%。
2.两组子集必须从完整集合中均匀取样。
其中第2点特别重要,均匀取样的目的是希望减少训练集/测试集与完整集合之间的偏差(Bias),但缺也不易做到,一般的做法是随机抽样,当样本数量足够时,便可达到均匀取样的效果,然而随机也正是这个方法的缺点,也是经常可以在数据上做手脚的地方。举例来说,当辨识率不理想时,便重新取样一组训练集与测试集,直到测试集的辨识率满意为止,但严格来说便算是作弊。
三大Cross-Validation方法
1.Hold-Out Method:
方法:将原始数据随机分为两组,一组做为训练集,一组做为验证集,利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率为此Hold-Out Method下分类器的性能指标。Hold-Out Method相对于K-fold Cross Validation又称Double cross-validation,或相对K-CV称 2-Fold Cross-Validation(2-CV)。
优点:处理简单,只需随机把原始数据分为两组即可。
缺点:严格意义来说Hold-Out Method并不能算是CV,因为这种方法没有达到交叉的思想,由于是随机的将原始数据分组,所以最后验证集分类准确率的高低与原始数据的分组有很大的关系,所以这种方法得到的结果其实并不具有说服性(主要原因是训练集样本数太少,通常不足以代表母体样本的分布,导致 test 阶段辨识率容易出现明显落差。此外,2-CV 中一分为二的分子集方法的变异度大,往往无法达到「实验过程必须可以被复制」的要求。)
2.K-Fold Cross Validation:(记为K-CV)
方法:作为Hold-Out Method的演进,将原始数据分成K组(一般是均分),将每个子集数据分别做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标。K一般大于等于2,实际操作时一般从3开始取,只有在原始数据集合数据量小的时候才会尝试取2。 而K-CV 的实验共需要建立 k 个models,并计算 k 次 test sets 的平均辨识率。在实际操作上,k 要够大才能使各回合中的 训练样本数够多,一般而言 k=10 (作为一个经验参数)算是相当足够了。
优点:K-CV可以有效的避免过学习以及欠学习状态的发生,最后得到的结果也比较具有说服性。
缺点:在K值的选取上具有一定难度,需要多次尝试来选取适当的K值。
3.Leave-One-Out Cross Validation:(记为LOO-CV)
方法:如果设原始数据有N个样本,那么LOO-CV就是N-CV,即每个样本单独作为验证集,其余的N-1个样本作为训练集,所以LOO-CV会得到N个模型,用这N个模型最终的验证集的分类准确率的平均数作为此下LOO-CV分类器的性能指标。
优点:相比于前面的K-CV,LOO-CV有两个明显的优点,每一回合中几乎所有的样本皆用于训练模型,因此最接近原始样本的分布,这样评估所得的结果比较可靠; 实验过程中没有随机因素会影响实验数据,确保实验过程是可以被复制的。
缺点:计算成本高,因为需要建立的模型数量与原始数据样本数量相同,当原始数据样本数量相当多时,LOO-CV在实际操作上便有困难几乎就是不显示,除非每次训练分类器得到模型的速度很快,或是可以用并行化计算减少计算所需的时间。