ReceiverOperatingCharacteristic

値を計算して受信者操作特性(ROC)曲線を構築します。ClassificationScoreと同様、このメソッドは真の値のベクトルに適用されます。

bool vector::ReceiverOperatingCharacteristic(
  const matrix&                pred_scores,   // 各クラスの確率分布を含む行列
  const ENUM_ENUM_AVERAGE_MODE  mode          // 平均化モード
  matrix&                      fpr,           // 各閾値に対して計算された誤検知率の値
  matrix&                      tpr,           // 各閾値に対して計算された真陽性率
  matrix&                      thresholds,   // 降順に並び替えられた閾値
  );

パラメータ

pred_scores

[in] 各クラスの確率を含む一連の水平ベクトルを含む行列。行列の行数は、真の値のベクトルのサイズに対応する必要があります。

mode

[in] ENUM_AVERAGE_MODE列挙の平均化モード。AVERAGE_NONE、AVERAGE_BINARY、AVERAGE_MICROのみが使用されます。

fpr

[out] 偽陽性率曲線の計算値を含む行列。平均化が適用されない場合(AVERAGE_NONE)、行列の行数はモデル クラスの数に対応します。列の数は、真の値のベクトルのサイズ(または確率分布行列pred_scoreの行数)に対応します。マイクロ平均化の場合、行列の行数は、重複を除いた閾値の合計数に対応します。

tpr

[out] 真陽性率曲線の計算値を含む行列。

threshold

[out] 確率行列を並び替えて得られた閾値行列。

 

注意事項

ClassificationScoreメソッドの注意事項を参照してください。

ROCグラフのプロットの例。tpr値がy軸にプロットされ、fpr値がx軸にプロットされます。また、fprグラフとtprグラフは個別にプロットされ、しきい値がX軸にプロットされます。

  matrixf mat_thres;
  matrixf mat_fpr;
  matrixf mat_tpr;
 
  if(y_true.ReceiverOperatingCharacteristic(y_scores,AVERAGE_MICRO,mat_fpr,mat_tpr,mat_thres))
    {
    double fpr[],tpr[],thres[];
    ArrayResize(fpr,mat_thres.Cols());
    ArrayResize(tpr,mat_thres.Cols());
    ArrayResize(thres,mat_thres.Cols());
 
    for(uint i=0; i<fpr.Size(); i++)
       {
        fpr[i]=mat_fpr[0][i];
        tpr[i]=mat_tpr[0][i];
        thres[i]=mat_thres[0][i];
       }
     thres[0]=thres[1]+0.001;
 
    PlotCurve("ROC curve (micro average)","roc","0.5",fpr,tpr);
    Plot2Curves("fpr-tpr (micro average)","fpr","tpr",thres,fpr,tpr);
    }
   

結果の曲線:

受信者操作特性(ROC)

fpr-tpr マイクロ平均のグラフ

 

グラフ出力コードはシンプルで、<Graphics/Graphic.mqh>標準ライブラリに基づいています。

例では、mnist.onnxモデルのデータを使用します。コードはPrecisionRecallメソッドの説明に記載されています。

ROC AUCは理想に近いです。
 

roc auc score micro = [0.99991]