matlab--交叉验证函数crossvalind
crossvalind
参考博客:
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个数。 接着,对标签集进行分析,可以参考
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函数的解释