1

KNN検索を使用して、テストデータを分類し、分類率を見つける必要があります。

以下はmatlabコードです:例:

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    load fisheriris
    x = meas(:,3:4); % x =all training data

    y = [5 1.45;6 2;2.75 .75]; % y =3 testing data 

    [n,d] = knnsearch(x,y,'k',10);   % find the 10 nearest neighbors to three testing data

    for b=1:3
    tabulate(species(n(b,:)))
    end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

結果はコマンドウィンドウに表示されました:

tabulate(species(n(1,:)))
       Value    Count   Percent
   virginica        2     20.00%
  versicolor        8     80.00%

tabulate(species(n(2,:)))
      Value    Count   Percent
  virginica       10    100.00%

tabulate(species(n(3,:)))
       Value    Count   Percent
  versicolor        7     70.00%
      setosa        3     30.00%

テストポイントが「Versicolor」の場合、1番目と3番目のテストポイントの結果は正しく分類され、2番目のテストポイントは間違っているため、分類率は2/3 x100%= 66.7%になります。

分類率を自動的に見つけて結果をワークスペースに保存するようにMATLABコードを変更するアイデアはありますか?

4

1 に答える 1

1

一般に、次を使用して正しい予測の数を見つけることができます

sum(predicted_class == true_class)        % For numerical data
sum(strcmp(predicted_class, true_class))  % For cellstrings

またはパーセンテージとして

100 * sum(predicted_class == true_class) / length(predicted_class)

fisheriris真のクラスの場合はspecies. 構築されたデータの場合、それは

true_classes = [cellstr('versicolor'); cellstr('versicolor'); cellstr('versicolor')]

最近傍の場合、真のクラスは最近傍のクラスになります。単一のネイバーの場合:

 predicted_class = species(n)

nによって検出された最近傍のインデックスはどこにありますか[n, d] = knnsearch(x, y)

sum(strcmp(predicted_class, true_class))
% result: 1

ネイバーを 1 つだけ使用する場合、これは確かに正しいです。

于 2012-12-07T13:37:43.063 に答える