2014-03-19 140 views
1

我必須使用k最近鄰居來對虹膜數據進行分類,(k = 1:30)我已經將數據分成樣本和涉及Leave-one-out交叉驗證,所以我有以下腳本:knn中的leave-one-out交叉驗證和混淆矩陣

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返回我回來只有一個值(第一個樣品),哪裏出了問題,任何人可以幫助? ?謝謝!

回答

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

它的工作原理!非常感謝! – user19565

+0

@ user19565沒問題,如果它可以工作,可以將其標記爲已解決:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – Dan