PrecisionRecall

Bir kesinlik-duyarlılık eğrisi oluşturmak için değerleri hesaplar. ClassificationScore'a benzer şekilde, bu metot da doğru değerler vektörüne uygulanır.

bool vector::PrecisionRecall(
   const matrix&                 pred_scores,   // her sınıf için olasılık dağılımını içeren matris
   const ENUM_ENUM_AVERAGE_MODE  mode           // ortalama alma modu
   matrix&                       precision,     // her eşik değeri için hesaplanan kesinlik değerleri
   matrix&                       recall,        // her eşik değeri için hesaplanan duyarlılık değerleri
   matrix&                       thresholds,    // azalan sırada sıralanmış eşik değerleri
   );

Parametreler

pred_scores

[in]  Her sınıf için olasılıkları içeren bir dizi yatay vektöre sahip bir matris. Matris satırlarının sayısı, doğru değerler vektörünün büyüklüğüne karşılık gelmelidir.

mode

[in] ENUM_AVERAGE_MODE numaralandırmasından ortalama alma modu. Yalnızca AVERAGE_NONE, AVERAGE_BINARY ve AVERAGE_MICRO kullanılır.

precision

[out]  Hesaplanan kesinlik eğrisi değerlerini içeren bir matris. Ortalama alma uygulanmazsa (AVERAGE_NONE), matristeki satır sayısı model sınıflarının sayısına karşılık gelir. Sütun sayısı, doğru değerler vektörünün büyüklüğüne (veya pred_score olasılık dağılımı matrisindeki satır sayısına) karşılık gelir. Mikro ortalama alma durumunda, matristeki satır sayısı, yinelenenler hariç olmak üzere toplam eşik değeri sayısına karşılık gelir.

recall

[out]  Hesaplanan duyarlılık eğrisi değerlerini içeren bir matris.

threshold

[out]  Olasılık matrisinin sıralanmasıyla elde edilen eşik matrisi.

 

Not

ClassificationScore metodu için notlara bakın.

Örnek:

mnist.onnx modelinden istatistik toplama örneği (%99 doğruluk).

//--- sınıflandırma metrikleri için veriler
   vectorf y_true(images);
   vectorf y_pred(images);
   matrixf y_scores(images,10);

//--- girdi-çıktı
   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("OnnxRun error ",GetLastError());
         break;
        }
      result.Activation(result,AF_SOFTMAX);

     //--- verileri topla
      y_true[test]=(float)test_data[test].label;
      y_pred[test]=(float)result.ArgMax();
      y_scores.Row(result,test);
     }    }

 
Doğruluk hesaplaması

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

Kesinlik değerlerinin y ekseninde ve duyarlılık değerlerinin x ekseninde çizildiği bir kesinlik-duyarlılık grafiği örneği. Ayrıca, kesinlik ve duyarlılık grafiklerinin ayrı ayrı çizildiği ve eşik değerlerinin x ekseninde gösterildiği bir başka örnek.  

   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);
     }

Ortaya çıkan eğriler:

Kesinlik-duyarlılık eğrisi

Kesinlik-duyarlılık grafiği