交叉验证(CrossValidation)解析

来源:互联网 发布:淘宝的idic模型 编辑:程序博客网 时间:2024/05/05 21:15
交叉验证(Cross-validation),是统计学上一种将数据样本(dataset)切割成较小子集的实用方法。该方法先在一个子集上做分析,而其它子集则用来做后续对此分析的确认及验证。一开始的子集被称为训练集(train set),而其它的子集则被称为验证集(validation set)。交叉验证是一种评估统计分析、机器学习算法对独立于训练数据的数据集的泛化能力。

Cross validation is a model evaluation method that is better than residuals. The problem with residual evaluations is that they do not give an indication of how well the learner will do when it is asked to make new predictions for data it has not already seen. One way to overcome this problem is to not use the entire data set when training a learner. Some of the data is removed before training begins. Then when training is done, the data that was removed can be used to test the performance of the learned model on ``new'' data. This is the basic idea for a whole class of model evaluation methods called cross validation.
——————————————————————————

上面的这个说法,有些同学可能会觉得抽象,简单地讲,若是把交叉验证应用在分类器性能分析上,它的基本思想就是在某种意义下将dataset进行分组,其中一部分作为train set另一部分作为validation set首先用train set对分类器进行训练,再利用validation set来测试训练得到的model,以此来做为评价分类器的性能指标。

下面,我们来来一段详细的解析:
 
在PR与ML的相关研究中,经常会将dataset分为training跟test这两个subsets,前者用以建立model,后者则用来评估该model对未知样本进行预测时的精确度,正规的说法是generalization ability。怎么将完整的dataset分为training set与test set也是学问,必须遵守两个要点:
  • training set中样本数量必须够多,一般至少大于总样本数的50%。
  • 两组子集必须从完整集合中均匀取样。
其中第2点特别重要,均匀取样的目的是希望减少training/test set与完整集合之间的偏差(bias),但却也不易做到。一般的作法是随机取样,当样本数量足够时,便可达到均匀取样的效果。然而随机也正是此作法的盲点,也是经常是可以在数据上做手脚的地方。举例来说,当辨识率不理想时,便重新取样一组training set与test set,直到test set的辨识率满意为止,但严格来说这样便算是作弊了。

Cross-validation正是为了有效的估测generalization error所设计的实验方法。

常见交叉验证方法可以分为如下几类:

1) Hold-Out Method
将原始数据随机分为两组,一组做为训练集,一组做为验证集,利用训练集训练分类器,然后利用验证集验证模型,记录最后的分类准确率为此Hold-OutMethod下分类器的性能指标。
此种方法的好处是处理简单,只需随机把原始数据分为两组即可,其实严格意义来说Hold-Out Method并不能算是交叉验证,因为这种方法没有达到交叉的思想,由于是随机的将原始数据分组,所以最后验证集分类准确率的高低与原始数据的分组有很大的关系,所以这种方法得到的结果其实并不具有说服性。

2) K-fold Cross Validation(记为K-CV)
将原始数据分成K组(一般是均分),然后将每个子集数据分别都做一次验证集,其余的K-1组子集数据作为训练集,这样会得到K个模型,用这K个模型最终的验证集的分类准确率的平均数作为此K-CV下分类器的性能指标。K一般大于等于2,实际操作时一般从3开始取,只有在原始数据集合数据量小的时候才会尝试取2.K-CV可以有效的避免过学习以及欠学习状态的发生,最后得到的结果也比较具有说服性。

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的缺点则是计算成本高,因为需要建立的模型数量与原始数据样本数量相同,当原始数据样本数量相当多时,LOO-CV在实作上便有困难几乎就是不显示,除非每次训练分类器得到模型的速度很快,或是可以用并行化计算减少计算所需的时间.

最后我们来谈谈使用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辨识率之平均值。


Reference:
[1]http://www.cs.cmu.edu/~schneide/tut5/node42.html
[2]http://www.zhizhihu.com/html/y2010/2245.html
[3]http://blog.sina.com.cn/s/blog_4998f4be0100awon.html
[4]http://www.cnblogs.com/wei-li/archive/2011/12/01/2270244.html


原创粉丝点击