0

こんにちは、matlab (単純ベイズ) で分類子を使用する場合、分類されたラベルを元のラベルと比較できる方法はありますか?

たとえば、下の画像を見てください。手動で各行を調べて、どれが正しく分類され、どれが分類されなかったかを確認する必要があります。

ここに画像の説明を入力

Classified 550 smurf missclassified 50 のようなリストを望んでいましたが、それらの行の idx が誤分類された別のファイルを出力します。

それがどのように見えるかの簡単な表

       Corrrectly Classified  |  Missclassified

Smruf        550                      50
Neptune      100                      80
and so on...

そして、インデックスは Smruf に誤分類されました

スマーフの誤分類 (行インデックス)

4896 
456
12789
12
456

誤って分類された他のラベルについては、洗い流して完了します。

4

2 に答える 2

4

あなたはその機能を探していconfusionmatます。サンプルデータを生成してみましょう。

>> y = [repmat(1,100,1); repmat(2,100,1); repmat(3,100,1)];

そしてそれを「分類」する

>> yhat = randsample(y,300); # randomly shuffle the inputs to 'classify' them

今、あなたは電話しますconfusionmat

>> [c order] = confusionmat(y,yhat)
ans =
    37    35    28
    30    32    38
    33    33    34

この表を解釈する方法は、行rと列cが、クラスcとして分類されたクラスrのデータ ポイントの数を示しているということです。

つまり、対要素は正しく分類された要素であり、非対角要素は正しく分類されていません。

変数cにはこの行列が含まれます。変数orderには、混同マトリックスに表示されるのと同じ順序で、クラスの名前が含まれます (つまり、列見出しとして解釈できます)。

私の例では、ポイントをランダムに分類しました。そのため、誤分類された例が非常に多くあります。

于 2012-07-20T17:23:33.713 に答える
0

非常に巨大なデータセットを分類する場合を除き、単純な for ループで問題ありません。

num_correct = 0;
num_wrong = 0;
for i=1:length(target_class)
    if isequal(taget_class{i}, class{i})
        num_correct = num_correct + 1;
    else
        num_wrong = num_wrong + 1;
    end
end
于 2012-07-20T17:24:44.697 に答える