2016-05-22 15 views
1

Ich bin neu mit Matlab, mein Ziel ist knn implementieren, ich habe zwei verschiedene txt-Dateien, eine enthält Testdaten (Beispiel) und die andere enthält Trainingsdaten.Wie KNN mit Matlab implementieren und die prozentuale Genauigkeit berechnen

Bis jetzt denke ich, ich sollte so etwas tun, aber ich bin nicht sicher, wie es geht.

load fisheriris 
x = meas(:,3:4); 
gscatter(x(:,1),x(:,2),species) 
newpoint = [5 1.45]; 
[n,d] = knnsearch(x,newpoint,'k',10); 
line(x(n,1),x(n,2),'color',[.5 .5 .5],'marker','o','linestyle','none','markersize',10) 

Oder vielleicht ist dies ein einfacher Weg, es zu tun, für mich ist das ganz klar die zwei verschiedene Arten von Daten, Proben- und Ausbildung, aber dies zeigt nicht die Genauigkeit der vorhergesagten Klasse.

A= [50, 60; 
    7,2; 
    13,12; 
    100,200;]; 
B=[1,0; 
    200,30; 
    19,10]; 
G={'First Row'; 
    'Second Row'; 
    'Third Row'}; 
class = knnclassify(A,B,G); 

disp('Result: '); 
disp(class); 

die Matrix sieht wie folgt aus:

Training data: 
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 
more,more,class.... 

Test data: 
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 
more,more,class.... 

Wie kann ich diese Daten mit knn klassifizieren und die Vorhersagen für jede Zeile zeigen, damit ich die Genauigkeit Prozentsatz berechnen kann?

-------EDITED------ 

Ich habe vergessen, wenn ich die Genauigkeit für jede Klasse brauche, was soll ich tun? Hier

Antwort

1

ist der aktualisierte Code knnclassify

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.']); 

% Calculate percentage accuracy for each class 
trueClass=testData(:,3); 
classList=unique(trueClass); 
for classIndex=1:length(classList) 
    indexesOfEachClass=find(trueClass==classList(classIndex)); 
    percentageAccuracyEachClass(classIndex,1)=sum(Class(indexesOfEachClass)==trueClass(indexesOfEachClass))/length(indexesOfEachClass)*100; 
end 
fprintf('\nClass %d Accuracy : %f%%',[classList.'; percentageAccuracyEachClass.']); 

% Calculate overall percentage accuracy 
dataClassifiedAccurately=Class==trueClass; 
percentageAccuracy=sum(dataClassifiedAccurately)/length(dataClassifiedAccurately)*100; 
fprintf('\n\nOverall Accuracy : %f%%\n',percentageAccuracy); 
+0

Vielen Dank, ich habe es total bekommen. –

+0

Wenn ich die ENN-Regel anwenden muss, was soll ich tun? gibt es ein Bild mit Pseudocode: http://i.imgur.com/axyD7ms.png würde es funktionieren, wenn ich das Trainingset nehme und die größte Entfernung sowie die kürzeste finde und dann durch die Anzahl dividiert Reihen. Und endlich den nächsten Nachbarn mit neuen editierten Trainingsdaten finden? –

+0

Ich habe die Antwort mit prozentualer Genauigkeit für jede Klasse aktualisiert. Weiter über ENN-Regel. Bitte fragen Sie das als neue Frage. –

Verwandte Themen