2016-05-22 7 views
1

私はmatlabを使用して新しいです、私の目標はknnを実装することです、私は2つの異なったtxtファイルを持って、1つはテストデータ(サンプル)を含み、Matlabを使用してKNNを実装し、パーセンテージの精度を計算する方法

これまでのところ、私はこのようなことをすべきだと思いますが、どうやってそれを行うのかは分かりません。

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) 

それとも、これは私にはそれがデータ、サンプルとトレーニングの異なる2組の非常に明らかだが、これは予測クラスの精度を示していない、それを行うには、より簡単な方法です。

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); 

行列は次のようになります。

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.... 

にはどうすれKNNを使用してこのデータを分類し、私は精度の割合を計算することができるように、各行の予測を表示することができますか?

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

各クラスの精度が必要な場合は、どうすればよいですか?ここで

答えて

1

は、おかげでたくさん、私は完全に今それを得る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

を使用して更新されたコードです。 –

+0

ENNルールを適用する必要がある場合、どうすればよいですか? 擬似コードの画像があります: http://i.imgur.com/axyD7ms.png トレーニングセットを取って最大の距離だけでなく、最短距離を見つけて、次にその数で割ったときに動作しますか?行。 最終的に、編集された新しいトレーニングデータのセットで最も近いネイバーを見つけますか? –

+0

私は各クラスの正確度のパーセンテージで答えを更新しました。次はENNルールについてです。新しい質問としてそれを聞いてください。 –