8

5 つの人間の行動を分類する分類器 (ガウス混合モデル) を作成します。観測ごとに、分類器はクラスターに属する事後確率を計算します。

0 から 100 までの値のしきい値でパラメーター化されたシステムのパフォーマンスを評価したいと考えています。すべてのしきい値について、すべての観察について、クラスターの 1 つに属する確率がしきい値よりも大きい場合、分類子の結果を受け入れます。それ以外の場合は破棄します。

すべてのしきい値について、真陽性、真陰性、偽陽性、偽陰性の数を計算します。

感度と特異度の 2 つの関数を次のように計算します。

sensitivity = TP/(TP+FN);

specificity=TN/(TN+FP);

マトラブで:

plot(1-specificity,sensitivity);

ROC曲線を持っています。しかし、結果は私が期待するものではありません。

これは、1 つのアクションのしきい値を変化させる、破棄、エラー、修正、感度、および特異性の関数のプロットです。

これは、しきい値を変化させた、破棄、エラー、修正、感度、および特異性の関数のプロットです。

これは、1 つのアクションの ROC 曲線のプロットです。 これはROC曲線のプロットです

これは、同じアクションの ROC 曲線のステムです。 ここに画像の説明を入力

私は間違っていますが、どこにあるのかわかりません。おそらく、特に分類器の結果がしきい値よりも小さい場合に、FP、FN、TP、TN の計算を間違っているため、破棄されます。破棄がある場合、何をインクリメントする必要がありますか?

4

2 に答える 2

5

バックグラウンド

内容を確認する必要があるため、これに回答しています。このような質問は大きな言い訳になります。良い機会をありがとう。

組み込みのフィッシャー アイリス データのデータを使用します: http://archive.ics.uci.edu/ml/datasets/Iris

また、分類に関する Mathworks チュートリアルのコード スニペットと、plotroc も使用します。

問題の説明

「setosa」を分類するためのドメイン内のより明確な境界がありますが、「versicoloir」と「virginica」には重複があります。これは 2 次元のプロットであり、それを作成するために他の情報の一部が破棄されています。この場合、分類境界のあいまいさが役に立ちます。

%load data
load fisheriris

%show raw data
figure(1); clf
gscatter(meas(:,1), meas(:,2), species,'rgb','osd');
xlabel('Sepal length');
ylabel('Sepal width');
axis equal
axis tight
title('Raw Data')

データの表示

分析

「virginica」と「non-virginica」を定義する線形分類器の境界を決定したいとしましょう。他のクラスの「自己対非自己」を見ることができますが、それらには独自のクラスがあります

そこで、いくつかの線形判別式を作成し、それらの ROC をプロットします。

%load data
load fisheriris
load iris_dataset

irisInputs=meas(:,1:2)';
irisTargets=irisTargets(3,:);

ldaClass1 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'linear')';
ldaClass2 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'diaglinear')';
ldaClass3 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'quadratic')';
ldaClass4 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'diagquadratic')';
ldaClass5 = classify(meas(:,1:2),meas(:,1:2),irisTargets,'mahalanobis')';

myinput=repmat(irisTargets,5,1);
myoutput=[ldaClass1;ldaClass2;ldaClass3;ldaClass4;ldaClass5];
whos
plotroc(myinput,myoutput)

結果は次のようになりますが、対角線の繰り返しコピーを削除する必要がありました。

ここに画像の説明を入力

コードで、「myinput」と「myoutput」をスタックし、それらを入力として「plotroc」関数にフィードしていることに注意してください。分類子の結果をターゲットと実績として取得する必要があり、同様の結果を得ることができます。これにより、分類子の実際の出力とターゲット値の理想的な出力が比較されます。これらは plotroc への入力です。

したがって、これにより「組み込み」の ROC が得られます。これは迅速な作業に役立ちますが、すべてのステップを詳細に学習する必要はありません。

この時点で、次のような質問をすることができます。

  • どの分類子が最適ですか? この場合、何が最善かを判断するにはどうすればよいですか?
  • 分類器の凸包とは? 純粋な方法よりも有益な分類器の混合物はありますか? おそらくバギング?
于 2013-12-27T17:20:06.077 に答える
-1

分類子のしきい値パラメーターに応じて、精度と再現率の曲線を描こうとしています。精度と再現率の定義は次のとおりです。

Precision = TP/(TP+FP)

Recall = TP/(TP+FN)   

これらのパラメーターの定義は、http: //en.wikipedia.org/wiki/Precision_and_recallで確認できます。

ここにいくつかの曲線があります: http://www.cs.cornell.edu/courses/cs578/2003fa/performance_measures.pdf

データセットをトレーニング セット、クロス検証セット、テスト セットに分割していますか? (データを分割しない場合、精度-再現率曲線が奇妙に見えるのは正常です)

EDITED:あなたの問題には2つの原因があると思います:

  1. 5 つのクラスの分類器をトレーニングする場合、通常は 5 つの特徴的な分類器をトレーニングする必要があります。(クラス A = クラス 1、クラス B = クラス 2、3、4、または 5) の 1 つの分類子、次に (クラス A = クラス 2、クラス B = クラス 1、3、4、または 5) の 2 番目の分類子、.. . およびクラス A の 5 番目 = クラス 5、クラス B = クラス 1、2、3 または 4)。

「複合」分類子の出力を選択すると言ったように、新しい (テスト) データポイントを 5 つの分類子に渡す必要があり、確率が最も高いものを選択します。

次に、1 つの分類子を他の分類子よりも優先して選択する重み付け値を定義するための 5 つのしきい値が必要です。matlab の実装がしきい値をどのように使用するかを確認する必要がありますが、その効果は、確率の高いクラスを選択するのではなく、重み付けされた確率の高いクラスを選択することです。

  1. おっしゃるとおり、TP、TN、FP、FN をうまく計算していないのかもしれません。テスト データには、すべてのクラスに属するデータポイントが必要です。次に、testdata(i,:) と classtestdata(i) はデータポイント i の特徴ベクトルと「グラウンド トゥルース」クラスです。分類子を評価すると、classifierOutput(i) = 1 または 2 または 3 または 4 または 5 が得られます。次に、「混同行列」を計算する必要があります。これは、複数のクラスがある場合に TP、TN、FP、FN を計算する方法です。 (> 2): http://en.wikipedia.org/wiki/Confusion_matrix http://www.mathworks.com/help/stats/confusionmat.html (TP、TN、FP、FN の関係に注意してください。マルチクラス問題の計算)

混同行列から、各サブ分類器の TP、TN、FP、FN データを取得できると思います (5 つの別個の分類器を計算していることに気付いていなくても覚えておいてください)。よくわかりませんが、サブ分類子ごとに精度再現率曲線を描くことができます。

これらのスライドもチェックしてください: http://www.slideserve.com/MikeCarlo/multi-class-and-structured-classification

ROC 曲線が何かわかりませんが、機械学習は私にとって非常に興味深いテーマなので調べてみます。

お役に立てれば、

于 2012-10-19T18:46:29.303 に答える