2016-05-23 4 views
0

testDataセットの各要素がKNNの予測と等しいかどうかを判断し、違う場合はそのケースを削除し、KNNが正しく予測したケースのみを含む新しいデータセットを作成します。MatlabでKNNを実装した後に間違った予測を削除するには?

KNNの間違った予測を削除するようなものなので、正しいものだけを持っています。

私は私が比較することができると思う:クラスとtestDataのインデックスで、私は異なる値を見つける場合、その行を削除します。

効果的な方法は何でしょうか?

これは、コード(私はこれでユーザー@Rijulからの助けを受け取った)である:私は私が達成しようとしていることENNルールと呼ばれていると思います

trainData= [148.0,50.0,0; ... 
      187.0,34.0,0; ... 
      204.0,89.0,0; ... 
      430.0,161.0,1; ... 
      427.0,22.0,1; ... 
      -42.0,469.0,1 ... 
      ]; 

testData= [290.0,-57.0,0; ... 
      194.0,-80.0,0; ... 
      174.0,33.0,0; ... 
      465.0,691.0,1; ... 
      270.0,-194.0,1; ... 
      -56.0,665.0,1]; 

% Data 
Sample=testData(:,1:2); 
Training=trainData(:,1:2); 
Group=trainData(:,3); 

% Classify 
k=1; % number of nearest neighbors used in the classification 
Class = knnclassify(Sample, Training, Group,k); 

% Display Prediction 
fprintf('%.1f %.1f - Real %d , Predicted %d\n',[testData.'; Class.']); 

testLabel=testData(:,3); 
cp = classperf(testLabel,Class); 
cp.CorrectRate*100 

答えて

0

与えられたプログラムの最後に次のコードを追加します。これにより、新しいテストデータtestDataNewが生成され、分類中に失敗したすべての行が削除されます。ここで

testDataNew=testData; 
for classIndex=length(Class):-1:1 
    if(testLabel(classIndex)~=Class(classIndex)) 
     testDataNew(classIndex,:)=[]; 
    end 
end 

は、それらの両方が同じ結果を与える別の代替

testDataNew=testData; 
failedIndexes=testLabel~=Class; 
testDataNew(failedIndexes,:)=[]; 

です。

関連する問題