K-Fold Cross Validation(K倍交叉检验)

来源:互联网 发布:淘宝商标申请入口 编辑:程序博客网 时间:2024/04/30 05:38

今天用matlab实现决策树,发现用到交叉检验的问题,好吧网上找的总结一下,以备不时之需!!!

下面是一个求6倍交叉检验的决策树的错误率代码。

function errorrate()
[S1,S2,S3,S4,S5,S6,S7,S8,classity]=textread('Pima-training-set.txt','%f %f %f %f %f %f %f %f %s');
D=[S1 S2 S3 S4 S5 S6 S7 S8];
AttributName={ 'preg','plas','pres','skin','insu','mass','pedi','age'};
t=classregtree(D,classity,'names',AttributName);
t=prune(t,'level',5);
costsum=zeros(6,1);
for k=1:6
cost=test(t,'cross',D,classity);
costsum=costsum+cost;
end
costsum=costsum/6;
i=1:6;
plot(i,costsum,'-o');xlabel('交叉次数');ylabel('错误率');
title('决策树k 倍交叉错误率曲线');
end


1)从k个数据中抛出一个数据
用剩下的k-1个数据训练模型,用得到的模型拟合扔出去的那一个数据,得到其预测误差
重复k次,直到所有的k个数据都这样被扔出去一次,将每次所得的预测误差加总即为CV值


交叉检验(Cross Validation)

在数据分析中,有些算法需要利用现有的数据构建模型,比如贝叶斯分类器,决策树,线性回归等,这类算法统称为监督学习(Supervisied Learning)算法。构建模型需要的数据称之为训练数据(Train Data)。

模型构建完后,需要利用数据验证模型的正确性,这部分数据被称为测试数据(Test Data)。测试数据不能用于模型构建之中,只能用于最后检验模型的准确性。

 

训练数据,验证数据和测试数据

一般做预测分析时,会将数据分为两大部分。一部分是训练数据,用于构建模型,一部分是测试数据,用于检验模型。但是,有时候模型的构建过程中也需要检验模型,辅助模型构建,所以会将训练数据在分为两个部分:1)训练数据;2)验证数据(Validation Data)。验证数据用于负责模型的构建。典型的例子是用K-Fold Cross Validation裁剪决策树,求出最优叶节点数,防止过渡拟合(Overfitting)。下面形式的描述一下前面提到的3类数据:

  • 训练数据(Test Data):用于模型构建
  • 验证数据(Validation Data):可选,用于辅助模型构建,可以重复使用。
  • 测试数据(Test Data):用于检测模型构建,此数据只在模型检验时使用,用于评估模型的准确率。绝对不允许用于模型构建过程,否则会导致过渡拟合。

 

K次交叉检验(K-Fold Cross Validation)

K次交叉检验的大致思想是将数据大致分为K个子样本,每次取一个样本作为验证数据,取余下的K-1个样本作为训练数据。模型构建后作用于验证数据上,计算出当前错误率。重复K次,将K次错误率平均,得到一个总体的错误率。可以通过整体错误率,估计当前整体数据用于建模的错误率。

举个例子,K = 10(常见情况),求出总体错误率为8.7%。那么将当前的所有数据全部作为训练数据,得到的模型的错误率90%的可能在9.7%左右。

0 0
原创粉丝点击