バックグラウンド
内容を確認する必要があるため、これに回答しています。このような質問は大きな言い訳になります。良い機会をありがとう。
組み込みのフィッシャー アイリス データのデータを使用します:
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 が得られます。これは迅速な作業に役立ちますが、すべてのステップを詳細に学習する必要はありません。
この時点で、次のような質問をすることができます。
- どの分類子が最適ですか? この場合、何が最善かを判断するにはどうすればよいですか?
- 分類器の凸包とは? 純粋な方法よりも有益な分類器の混合物はありますか? おそらくバギング?