crossvalind
参考博客:
crossvalind函数详解
matlab官网讲解
load fisheriris
indices = crossvalind('Kfold',species,10);
cp = classperf(species);
for i = 1:10
test = (indices == i);
train = ~test;
class = classify(meas(test,:),meas(train,:),species(train,:));
classperf(cp,class,test);
end
cp.ErrorRate
下面逐行讲解一下:
首先load fisheriris将数据集载入,可以得到meas和indices两个数据集,分别为原始的数据集和他们的标签。
可以看到数据集有150个样本,每一行是一个样本数据。
接着用交叉验证函数做十次交叉验证,将标签均分成十份,每一份打上不同的记号,记号为一个正整数。
indices = crossvalind(‘Kfold’,species,10);
可以得到150个数被不同的数打标签,同样的数就是一份,一共是十份,每一份有15个数。
接着,对标签集进行分析,可以参考classpef
cp = classperf(species);
接下来这段代码就好理解了,十次循环,每一次取其中一份作为测试集,其余的做训练集,使用classify最近邻方法进行分类,并评估错误率。
for i = 1:10
test = (indices == i);
train = ~test;
class = classify(meas(test,:),meas(train,:),species(train,:));
classperf(cp,class,test);
end
cp.ErrorRate
取其中的i=1的情况,分别看下得到的结果:
关于classify函数的解释 classify