ReceiverOperatingCharacteristic

Вычисляет значения для построения кривой Receiver Operating Characteristic (ROC). Данный метод, как и метод ClassificationScore, применяется к вектору истинных значений.

bool vector::ReceiverOperatingCharacteristic(
   const matrix&                 pred_scores,   // матрица, содержащая распределение вероятностей по каждому классу
   const ENUM_ENUM_AVERAGE_MODE  mode           // режим усреднения
   matrix&                       fpr,           // рассчитанные значения false positive rate для каждого порогового значения
   matrix&                       tpr,           // рассчитанные значения true positive rate для каждого порогового значения
   matrix&                       thresholds,    // пороговые значения, отсортированные по убыванию
   );

Параметры

pred_scores

[in]  Матрица, содержащая набор горизонтальных векторов с вероятностями по каждому классу. Количество строк матрицы должно соответствовать размеру вектора истинных значений.

mode

[in]  Режим усреднения из перечисления ENUM_AVERAGE_MODE. Используются только AVERAGE_NONE, AVERAGE_BINARY и AVERAGE_MICRO.

fpr

[out]  Матрица с рассчитанными значениями кривой false positive rate. В случае с отсутствием усреднения (AVERAGE_NONE) количество строк в матрице соответствует количеству классов модели. Количество колонок соответствует размеру вектора истинных значений (или количеству строк в матрице распределений вероятностей pred_score). В случае микроусреднения количество строк в матрице соответствует общему количеству пороговых значений за исключением дублей.

tpr

[out]  Матрица с рассчитанными значениями кривой true positive rate.

threshold

[out]  Матрица пороговых значений, полученная путём сортировки матрицы вероятностей

 

Примечание

Смотрите примечания для метода ClassificationScore.

Пример

Пример вывода графиков ROC, где на оси y отложены значения tpr, на оси x - значения fpr. А также вывод отдельных графиков 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);
     }
    

Результат:

Receiver Operating Characteristic (ROC)

Graph fpr-tpr micro average

 

Код вывода графиков элементарный и основан на стандартной библиотеке <Graphics/Graphic.mqh>.

Использованы данные тестирования модели mnist.onnx, код представлен в описании метода PrecisionRecall.

ROC AUC близок к идеальному.
 

roc auc score micro = [0.99991]