2016-05-23 6 views
0

Ich möchte feststellen, ob jedes Element des testData-Sets gleich der Vorhersage von KNN ist, und wenn es anders ist, löschen Sie diesen Fall und erstellen Sie einen neuen Datensatz, der nur die Fälle enthält, in denen KNN richtig vorhergesagt hat.Wie können falsche Vorhersagen nach der Implementierung von KNN in Matlab gelöscht werden?

Ist wie Löschen der falschen Vorhersagen von KNN, also habe ich nur die richtigen.

Ich denke, ich kann vergleichen: Klasse gegen testData nach Index, und wenn ich andere Werte finde, löschen Sie diese Zeile.

Was wäre ein effizienter Weg, dies zu tun?

Dies ist der Code (Ich bekam Hilfe von Benutzer @Rijul mit diesem):

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 

Ich denke, was ich versuche ENN Regel zu erreichen, wird aufgerufen.

Antwort

0

Fügen Sie den folgenden Code an das Ende des angegebenen Programms. Dies erzeugt neue Testdaten testDataNew mit allen Zeilen, die während der Klassifizierung fehlgeschlagen sind.

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

Hier ist eine weitere Alternative

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

Beide werden das gleiche Ergebnis.

Verwandte Themen