千进一出交叉验证和混淆矩阵

问题描述 投票:1回答:2

我必须使用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仅返回我一个值(对于第一个样本),问题出在哪里,有人可以帮忙吗?谢谢!

matlab statistics knn cross-validation confusion-matrix
2个回答
1
投票

我认为您可能在此之后:

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

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


0
投票

此代码无效。装鱼group = [ones(1,50),2 * ones(1,50),3 * ones(1,50)]';对于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)=fitcknn(sample,training1,group_training,k);
 end   

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

结束

我不知道哪里出了错

© www.soinside.com 2019 - 2024. All rights reserved.