PrecisionRecall

Calcule les valeurs pour construire une courbe de rappel de précision. De la même manière que ClassificationScore, cette méthode est appliquée au vecteur de valeurs vraies.

bool vector::PrecisionRecall(
   const matrix&                 pred_scores,   // matrice contenant la distribution de probabilité pour chaque classe
   const ENUM_ENUM_AVERAGE_MODE  mode           // mode de moyenne 
   matrix&                       precision,     // valeurs de précision calculées pour chaque valeur de seuil
   matrix&                       recall,        // valeurs de rappel calculées pour chaque valeur de seuil
   matrix&                       thresholds,    // valeurs de seuil triées par ordre décroissant 
   );

Paramètres

pred_scores

[in]  Une matrice contenant un ensemble de vecteurs horizontaux avec des probabilités pour chaque classe. Le nombre de lignes de la matrice doit correspondre à la taille du vecteur de valeurs vraies.

mode

[in]  Mode de moyenne à partir de l'énumération ENUM_AVERAGE_MODE. Seuls AVERAGE_NONE, AVERAGE_BINARY et AVERAGE_MICRO sont utilisés.

precision

[out]  Une matrice avec des valeurs de courbe de précision calculées. Si aucune moyenne n'est appliquée (AVERAGE_NONE), le nombre de lignes dans la matrice correspond au nombre de classes du modèle. Le nombre de colonnes correspond à la taille du vecteur de valeurs vraies (ou au nombre de lignes dans la matrice de distribution de probabilité pred_score). Dans le cas d'une micromoyenne, le nombre de lignes dans la matrice correspond au nombre total de valeurs de seuil, hors doublons.

recall

[out]  Une matrice avec les valeurs calculées de la courbe de rappel.

threshold

[out]  Matrice de seuil obtenue en triant la matrice de probabilité

 

Note

Voir les notes sur la méthode ClassificationScore.

Exemple

Un exemple de collecte des statistiques depuis le modèle mnist.onnx (précision 99%).

//--- données pour les métriques de classification
   vectorf y_true(images);
   vectorf y_pred(images);
   matrixf y_scores(images,10);

//--- entrée sortie
   matrixf image(28,28);
   vectorf result(10);
 

//--- test
   for(int test=0; test<images; test++)
     {
      image=test_data[test].image;
      if(!OnnxRun(model,ONNX_DEFAULT,image,result))
        {
         Print("Erreur OnnxRun  ",GetLastError());
         break;
        }
      result.Activation(result,AF_SOFTMAX);

     //--- collecte des données
      y_true[test]=(float)test_data[test].label;
      y_pred[test]=(float)result.ArgMax();
      y_scores.Row(result,test);
     }    }

 
Calcul de précision

   vectorf accuracy=y_pred.ClassificationMetric(y_true,CLASSIFICATION_ACCURACY);
   PrintFormat("accuracy=%f",accuracy[0]);
 
accuracy=0.989000

Un exemple de tracé de graphiques de rappel de précision, où les valeurs de précision sont tracées sur l'axe des y et les valeurs de rappel sont tracées sur l'axe des x. Les graphiques de précision et de rappel sont également tracés séparément, avec des valeurs de seuil tracées sur l'axe des x.  

   if(y_true.PrecisionRecall(y_scores,AVERAGE_MICRO,mat_precision,mat_recall,mat_thres))
     {
      double precision[],recall[],thres[];
      ArrayResize(precision,mat_thres.Cols());
      ArrayResize(recall,mat_thres.Cols());
      ArrayResize(thres,mat_thres.Cols());
 
      for(uint i=0; i<thres.Size(); i++)
        {
         precision[i]=mat_precision[0][i];
         recall[i]=mat_recall[0][i];
         thres[i]=mat_thres[0][i];
        }
      thres[0]=thres[1]+0.001;
 
      PlotCurve("Precision-Recall curve (micro average)","p-r","",recall,precision);
      Plot2Curves("Precision-Recall (micro average)","precision","recall",thres,precision,recall);
     }

Courbes des résultats :

Courbe précision-rappel

Graphique Précision-Rappel