PrecisionRecall

값들을 계산하여 정밀도-재현율 곡선(precision-recall curve)을 구성합니다. ClassificationScore와 마찬가지로 이 메서드는 참값의 벡터에 적용됩니다.

bool vector::PrecisionRecall(
   const matrix&                 pred_scores,   // 각 클래스의 확률 분포를 포함하는 행렬
   const ENUM_ENUM_AVERAGE_MODE  mode           // 평균화 모드
   matrix&                       precision,     // // 각 임계값에 대해 계산된 정밀도의 값들
   matrix&                       recall,        // 각 임계값에 대해 계산된 재현율 값
   matrix&                       thresholds,    // 내림차순으로 정렬된 기준값들
   );

매개 변수

pred_scores

[in]  각 클래스에 대한 확률이 포함된 수평 벡터의 집합을 포함하는 행렬. 행렬 행의 수는 실제 값으로 구성된 벡터의 크기와 일치해야 합니다.

mode

[in] ENUM_AVERAGE_MODE 열거의 평균화 모드. AVERAGE_NONE, AVERAGE_BINARY 및 AVERAGE_MICRO만 사용됩니다.

precision

[out]  계산된 정밀도 곡선 값이 포함된 행렬입니다. 평균화가 적용되지 않은 경우(AVERAGE_NONE) 행렬의 행 수는 모델의 클래스의 수에 해당합니다. 열 수는 참값 벡터의 크기(또는 확률 분포 행렬 pred_score의 행 수)에 해당합니다. 미세 평균화의 경우 행렬의 행 수는 중복을 제외한 임계값의 총 수에 해당합니다.

recall

[out]계산된 재현율 곡선 값이 포함된 행렬  .

threshold

[out]  확률 행렬을 정렬하여 얻은 임계 행렬

 

참조

ClassificationScore 메서드에 대한 참고 사항을 참조하세요.

예시

mnist.onnx 모델에서 통계를 수집하는 예(정확도 99%)

//--- 분류 측정항목 데이터
   vectorf y_true(images);
   vectorf y_pred(images);
   matrixf y_scores(images,10);

//--- 입력-출력
   matrixf image(28,28);
   vectorf result(10);
 

//--- 테스팅
   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);

     //--- 데이터 수집
      y_true[test]=(float)test_data[test].label;
      y_pred[test]=(float)result.ArgMax();
      y_scores.Row(result,test);
     }    }

 
정확도 계산

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

정밀도 값이 y축에 표시되고 재현율 값이 x축에 표시되는 정밀도-재현율 그래프를 그리는 예입니다. 또한 정밀도 및 재현율 그래프는 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);
     }

결과 곡선:

정밀도-재현율 곡선

정밀도-재현율 그래프