ReceiverOperatingCharacteristic

Calcula los valores para construir la curva Receiver Operating Characteristic (ROC). Este método, al igual que el método ClassificationScore, se aplica al vector de valores verdaderos.

bool vector::ReceiverOperatingCharacteristic(
   const matrix&                 pred_scores,   // matriz que contiene la distribución de probabilidad de cada clase
   const ENUM_ENUM_AVERAGE_MODE  mode           // modo de promediación
   matrix&                       fpr,           // valores false positive rate calculados para cada valor umbral
   matrix&                       tpr,           // valores true positive rate calculados para cada valor umbral
   matrix&                       thresholds,    // valores umbral clasificados en orden descendente
   );

Parámetros

pred_scores

[in]  Matriz que contiene un conjunto de vectores horizontales con probabilidades para cada clase. El número de filas de la matriz debe corresponderse con el tamaño del vector de valores verdaderos.

mode

[in]  Modo de promediación de la enumeración ENUM_AVERAGE_MODE. Se usan solo AVERAGE_NONE, AVERAGE_BINARY y AVERAGE_MICRO.

fpr

[out]  Matriz con los valores calculados de la curva false positive rate. Si no hay promediación (AVERAGE_NONE), el número de filas de la matriz se corresponderá con el número de clases del modelo. El número de columnas se corresponde con el tamaño del vector de valores verdaderos (o al número de filas de la matriz de distribución de probabilidad pred_score). En caso de micro-promediación, el número de filas de la matriz se corresponderá con el número total de valores umbral excluyendo los dobles.

tpr

[out]  Matriz con los valores calculados de la curva true positive rate.

threshold

[out]  Matriz de valores umbral obtenida clasificando la matriz de probabilidades

 

Observación

Consulte las notas para el método ClassificationScore.

Ejemplo

Ejemplo de muestra de los gráficos ROC, donde los valores tpr se representan en el eje y, mientras que los valores fpr se representan en el eje x. También se obtienen gráficos fpr y tpr independientes, en los que los valores umbral se representan en el eje 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);
     }
    

Resultado:

Receiver Operating Characteristic (ROC)

Graph fpr-tpr micro average

 

El código de muestra de gráficos es elemental y se basa en la biblioteca estándar <Graphics/Graphic.mqh>.

Se han utilizado los datos de prueba del modelo mnist.onnx, cuyo código se presenta en la descripción del método PrecisionRecall.

ROC AUC está próximo al ideal.
 

roc auc score micro = [0.99991]