2016-12-04 9 views
-1

データを分類するためにKNNアルゴリズムを実装する必要があります。 私はテストマトリックス(200 * 25)と列車マトリックス(800 * 25)を持っています。 k = 1,3,5については、matlab でKNNとその精度を見つける必要があります。K最近傍を見つける

これは、これまでの私のコードですが、私はわからない:

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 

答えて

0

この

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

が冗長です。 2番目のステートメントだけが必要です。

再び

そして、ここで:今、あなたはdistdistsを使用したことを除いて

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

。 2番目の割り当てが必要でした。最初の割り当てはMatlabのdist関数を実際にオーバーライドします。

だから、k-NNに戻る。この

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

はあなたにすべてのトレーニングインスタンスj=1,2,...rtrain対テスト・インスタンスidxの間の距離を提供します。それはほぼ1-NNです。今では、最小の距離を見つけて、クラスラベルを確認するだけです。

は、最近傍のインデックスを見つけるには、この操作を行うことができます。

[~, neighbour] = min(dists); 

minの2つの値を返し:最小値と最小値のインデックス。このコードでは、距離を無視して最も近い隣のインデックスのみを取ります。

このコードをk-NNに拡張するには、minの代わりにsortを使用してください。同様に動作します。

+0

私は感謝していますk> 1これを私に説明し、コードを書く –

関連する問題