2

で描かれた ROC 曲線が与えられた場合plotroc.m(ここを参照):

  1. 理論上の問題:使用する最適なしきい値を選択するにはどうすればよいですか?
  2. プログラミングの質問:libsvm分類子が選択された (最適な) しきい値で動作するように誘導するにはどうすればよいですか?
4

1 に答える 1

2

ROC 曲線は、真陽性の割合を y 軸に、偽陽性の割合を x 軸にプロットすることによって生成されたプロットです。したがって、ROC 曲線上の任意の点 (x、y) の座標は、特定のしきい値での FPR および TPR 値を示します。図に示すように、ROC 曲線上の点 (x,y) を見つけます。これは、プロットの左上隅 (つまり、(0,1) で与えられる) からのその点の最小距離に対応します。その点に対応するしきい値が必要なしきい値です。申し訳ありませんが、画像を入れることは許可されていないため、図で説明できませんでした。ただし、この詳細については、ROC 関連のヘルプをクリックしてください。

次に、libsvm では、svmpredict 関数は、特定のクラスに属するデータ サンプルの確率を返します。したがって、その確率 (陽性クラスの場合) がしきい値 (ROC プロットから取得) より大きい場合、サンプルを陽性クラスに分類できます。これらの数行は役に立つかもしれません:

    [pred_labels,~,p] = svmpredict(target_labels,feature_test,svmStruct,'-b 1');

% ここで、svmStruct は svmtrain 関数によって返される構造体です。

    op = p(:,svmStruct.Label==1);  % This gives probability for positive
% class (i.e whose label is 1 )

この変数 'op' がしきい値よりも大きい場合、対応するテスト サンプルを陽性クラスに分類できます。これは次のように行うことができます

op_labels = op> 番目; % ここで、'th' は ROC から取得したしきい値です

于 2014-05-30T19:15:38.070 に答える