2016-12-04 11 views
-1

Ich muss KNN-Algorithmus implementieren, um Daten zu klassifizieren. Ich habe eine Testmatrix (200 * 25) und eine Zugmatrix (800 * 25). Ich muss KNN und seine Präzision in Matlab für k = 1,3,5 finden.K-nächste Nachbarn finden

Dies ist mein Code so weit, aber ich bin nicht sicher:

clc 
clear all 
close all 

train=load('Train.txt'); 
[rtrain,ctrain]=size(train); 
xtrain=zeros(rtrain,ctrain-1); 
xtrain=train(:,1:ctrain-1); 


test=load('Test.txt'); 
[rtest,ctest]=size(test); 
xtest=zeros(rtest,ctest-1); 
xtest=test(:,1:ctest-1); 


dist=zeros(rtrain,1); 
N = size(rtrain,1); 
dists = zeros(N,1); 
for idx = 1 : N 
    for j=1:rtrain 
    dists(idx) = sqrt(sum((xtest(idx,:) - xtrain(j,:)).^2)) 
    end 
end 

Antwort

0

Diese

xtrain=zeros(rtrain,ctrain-1); 
xtrain=train(:,1:ctrain-1); 

redundant ist. Sie brauchen nur die zweite Aussage.

Und auch hier wieder:

dist=zeros(rtrain,1); 
N = size(rtrain,1); 
dists = zeros(N,1); 

außer dass jetzt verwendet man dist und dists. Sie wollten nur die zweite Aufgabe - die erste überschreibt Matlabs dist Funktion.

Also, zurück zu k-NN. Diese

for idx = 1 : N 
    for j=1:rtrain 
     dists(idx) = sqrt(sum((xtest(idx,:) - xtrain(j,:)).^2)) 
    end 
end 

gibt Ihnen den Abstand zwischen Testinstanz idx im Vergleich zu allen Trainingsinstanzen j=1,2,...rtrain. Großartig, das ist fast das 1-NN. Jetzt müssen Sie nur noch die kleinste Entfernung finden und die Klassenlabels überprüfen.

Um den Index des nächsten Nachbarn zu finden, können Sie dies tun:

[~, neighbour] = min(dists); 

min kehrt zwei Werte: die minimale und der Index des Minimums. Mit diesem Code ignorierst du die Entfernung und nimmst nur den Index des nächsten Nachbarn.

Um diesen Code für k-NN zu erweitern, verwenden Sie sort anstelle von min. Es verhält sich ähnlich.

+0

Ich bin dankbar, wenn k> 1 mir das erklären und Code schreiben –

Verwandte Themen