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]  包含一组水平向量(含有每个类的概率)的矩阵。矩阵行数必须与真值向量的大小相对应。

模式

[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]