Matlab 在knn中省略一个交叉验证和混淆矩阵

Matlab 在knn中省略一个交叉验证和混淆矩阵,matlab,statistics,knn,cross-validation,confusion-matrix,Matlab,Statistics,Knn,Cross Validation,Confusion Matrix,我必须使用k近邻(k=1:30)对虹膜数据进行分类。我已将数据分为样本和训练,其中涉及遗漏交叉验证,因此我有以下脚本: load fisheriris group=[ones(1,50), 2*ones(1,50), 3*ones(1,50)]'; for k=(1:30); for i=(1:150); sample=meas(i,:); training1=meas; training1(i,:)=[];

我必须使用k近邻(k=1:30)对虹膜数据进行分类。我已将数据分为样本和训练,其中涉及遗漏交叉验证,因此我有以下脚本:

load fisheriris
group=[ones(1,50), 2*ones(1,50), 3*ones(1,50)]';

    for k=(1:30);
         for i=(1:150);
         sample=meas(i,:);
         training1=meas;
         training1(i,:)=[];
         group_sample=group(i);
         group_training=group;
         group_training(i)=[];
         c(i,k)=knnclassify(sample,training1,group_training,k);

         A=confusionmat(group, c(i,k)); 
         mean_error(k)=mean(A(:)); 
         std_error(k)=std(A(:)); 
         end   
    end

问题是我无法生成混淆矩阵,因为c只返回一个值(对于第一个样本),问题出在哪里,有人能帮忙吗??谢谢

我想你可能在追求这个:

for k=1:30

     for i=1:150
         sample=meas(i,:);
         training1=meas;
         training1(i,:)=[];
         group_sample=group(i);
         group_training=group;
         group_training(i)=[];
         c(i,k)=knnclassify(sample,training1,group_training,k);
     end   

     A=confusionmat(group, c(:,k)); 
     mean_error(k)=mean(A(:)); 
     std_error(k)=std(A(:)); 

end

因此,换句话说,只有在交叉验证循环之后才能找到混淆矩阵。

@user19565没问题,如果有效,您可以将其标记为已解决: