十折交叉验证
(1)英文名叫做10-fold cross-validation,用来测试算法准确性,是常用的测试方法。
(2)将数据集分成十份,轮流将其中9份作为训练数据,1份作为测试数据,进行试验。每次试验都会得出相应的正确率(或差错率)。
(3)10次的结果的正确率(或差错率)的平均值作为对算法精度的估计,一般还需要进行多次10折交叉验证(例如10次10折交叉验证),再求其均值,作为对算法准确性的估计。
例子:利用十折交叉验证计算错误分类率
(Matlab内置了由Fisher在1936年发布的关于iris的数据集,鸠尾花的分类,详见UCI链接;载入该数据集,包括means和species,分别是四维的150个样本和对应的类别)
load fisheriris
indices = crossvalind('Kfold',species,10);
cp = classperf(species);
for i = 1:10
test = (indices == i); train = ~test;
%分别取第1、2、...、10份为测试集,其余为训练集
class = classify(meas(test,:),meas(train,:),species(train,:));
classperf(cp,class,test);
end
cp.ErrorRate
%查询错误分类率
相关函数解释:
Indices = crossvalind('Kfold', N,