0

10 倍のクロス検証を使用した MATLAB KNN 分類器の例に従いました。モデルのパフォーマンスを計算する段階で迷っています。下のコードを見て、分類の精度をパーセンテージで正しく取得する方法についてアドバイスをください ( %)、cVError = 1-mean(errorMat) の部分がわかりません。次に、fitcknn 関数と knn.predict 関数を使用してモデルをトレーニングおよびテストしました。同じタスクを実行する独自の関数を作成する方法について助けが必要です。ありがとうございました。

indices = crossvalind('kfold',labels,10);
confusionMatrix = cell(1,1);
errorMat = zeros(1,10);
for i = 1:10
test = (indices==i);
train = ~test;
knn = fitcknn(data(train,:),labels(train),'NumNeighbors',kVal);
y = knn.predict(data(test,:));
index = cellfun(@strcmp,y,labels(test));
errorMat(i) = sum(index)/length(y);
confusionMatrix{i} = confusionmat(labels(test),y);
end

% Calculate misclassification error
cvError = 1-mean(errorMat); 
4

1 に答える 1

1

誤差計算

台詞

index = cellfun(@strcmp,y,labels(test));
errorMat(i) = sum(index)/length(y);

i番目の分類の成功率を計算します(0 から 1 の間)。平均成功率は、10 回の成功率 (評価ごとに 1 つ) の平均です。

この線

cvError = 1-mean(errorMat); 

は平均エラー率です。たとえば、成功率が 0 の場合 (= 平均して分類子は常に失敗する)、エラー率は 1 になり、その逆も同様です。これを補完事象確率と呼びます。

fitcknnknn.predict実装

ネイティブの MATLAB 関数は、最適化およびプリコンパイルされているため、通常は高速です。ただし、自分でそれらを実装する必要がある場合 (宿題など)、数学的理論を読んでから、ロジックを段階的に実装する必要がありますが、これには時間がかかる場合があります。もちろん、仮のコードで問題が発生した場合は、新しい質問を投稿してください。

もちろん、それを行うにはいくつかの方法があります (予測ごとに並べ替えられた距離ベクトルを構築するのが最も簡単な方法の 1 つです) が、問題は、使用できる関数のセットにパフォーマンス要件/制限があるかどうかです。

推奨されるリンク (基本的には Google 検索の最初の結果):

http://en.wikipedia.org/wiki/K-nearest_neighbors_algorithm

http://www.scholarpedia.org/article/K-nearest_neighbor

http://www.csee.umbc.edu/~tinoosh/cmpe650/slides/K_Nearest_Neighbor_Algorithm.pdf

于 2015-01-26T11:30:50.203 に答える