ReceiverOperatingCharacteristic

Calcula os valores para traçar a curva Receiver Operating Characteristic (ROC). Esse método, assim como o método ClassificationScore, é aplicado a um vetor de valores verdadeiros.

bool vector::ReceiverOperatingCharacteristic(
   const matrix&              pred_scores,   // matriz que contém a distribuição de probabilidade para cada classe
   const ENUM_ENUM_AVERAGE_MODE  mode           // modo de cálculo da média
   matrix&                       fpr,           // valores false positive rate calculados para cada valor de limite
   matrix&                       tpr,           // valores true positive rate calculados para cada valor de limite
   matrix&                       thresholds,    // limiares classificados em ordem decrescente
   );

Parâmetros

pred_scores

[in] Matriz que contém um conjunto de vetores horizontais com probabilidades para cada classe. O número de linhas da matriz deve corresponder ao tamanho do vetor de valores reais.

mode

[in]  Modo de cálculo da média a partir da enumeração ENUM_AVERAGE_MODE. São usados apenas AVERAGE_NONE, AVERAGE_BINARY e AVERAGE_MICRO.

fpr

[out]  Matriz com valores calculados da curva false positive rate. Se não houver cálculo de média (AVERAGE_NONE), o número de linhas na matriz corresponderá ao número de classes de modelo. O número de colunas corresponde ao tamanho do vetor de valores verdadeiros (ou o número de linhas na matriz de distribuição de probabilidade pred_score). No caso da micro-média, o número de linhas na matriz corresponde ao número total de limites, excluindo as duplas.

tpr

[out]  Matriz com valores calculados da curva true positive rate.

threshold

[out]  Matriz de limiar obtida pela classificação da matriz de probabilidade

 

Observação

Consulte as notas sobre o método ClassificationScore.

Exemplo:

Exemplo de exibição de gráfico ROC, em que os valores de tpr são plotados no eixo y e os valores de fpr são plotados no eixo x. Além de gerar gráficos separados de fpr e tpr, em que os valores de limite são plotados no eixo 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

 

O código de geração de gráficos é elementar e se baseia na biblioteca padrão <Graphics/Graphic.mqh>.

São usados dados de teste do modelo mnist.onnx, e o código é apresentado na descrição do método PrecisionRecall.

O ROC AUC está próximo do ideal.
 

roc auc score micro = [0.99991]