模式识别之K折交叉验证法(k-fold cross validation)

1. 交叉验证:交叉验证(Cross-validation)主要用于建模应用中,例如PCR 、PLS 回归建模中。在给定的建模样本中,拿出大部分样本进行建模型,留小部分样本用刚建立的模型进行预报,并求这小部分样本的预报误差,记录它们的平方加和。

2. k折交叉验证就是将数据集A随机分为k个包,每次将其中一个包作为测试集,剩下k-1个包作为训练集进行训练。

纽约大学博士Seymour Geisser提出K折交叉验证法,具体步骤如下:

1)将数据集D随机分为k个包(这里假定K=6);

2)每次将其中一个包作为测试集test,剩下k-1个包作为训练集train进行训练;

3)最后计算k次求得的分类率的平均值,作为该模型或者假设函数的真实分类率;

3. 10折交叉验证举例

第1步,将数据等分到10个桶中。
 

我们会将50名篮球运动员和50名非篮球运动员分到每个桶中。每个桶当中放入了100人的信息。

第2步,下列步骤重复10次。

(1)每一次迭代中留存其中一个桶。第一次迭代中留存桶1,第二次留存桶2,其余依此类推。

(2)用其他9个桶的信息训练分类器(第一次迭代中利用从桶2到桶10的信息训练分类器)。

(3)利用留存的数据来测试分类器并保存测试结果。在上例中,这些结果可能如下:

35个篮球运动员被正确分类;

29个非篮球运动员被正确分类。

第3步,对上述结果汇总。

通常情况下我们会将结果放到与下表类似的表格中:

 

分成篮球运动员

分成非篮球运动员

实际为篮球运动员

372

128

实际为非篮球运动员

220

280

在所有500名篮球运动员中,有372人被正确分类。可能需要做的一件事是将右下角的数字也加上去,也就是说1000人当中有652(372+280)人被正确分类。因此得到的精确率为65.2%。与2折或3折交叉验证相比,基于10折交叉验证得到的结果可能更接近于分类器的真实性能。之所以这样,是因为每次采用90%而不是2折交叉验证中仅仅50%的数据来训练分类器。