ClassificationMetric

실제 데이터와 비교하여 예측 데이터의 품질을 평가하기 위해 분류 지표를 계산합니다. 이 방법은 예측 값의 벡터에 적용됩니다.

vector vector::ClassificationMetric(
   const vector&              vect_true,     // 참인 값들의 벡터
   ENUM_CLASSIFICATION_METRIC metric         // 메트릭 유형
   );
 
 
vector vector::ClassificationMetric(
   const vector&              vect_true,     // 참인 값들의 벡터
   ENUM_CLASSIFICATION_METRIC metric         // 메트릭 유형
   ENUM_AVERAGE_MODE          mode           // 평균화 모드
   );

매개 변수

vect_true

[in] 참인 값들의 벡터.

메트릭

[in] ENUM_CLASSIFICATION_METRIC 열거에서 메트릭 유형. CLASSIFICATION_TOP_K_ACCURACY, CLASSIFICATION_AVERAGE_PRECISION 및 CLASSIFICATION_ROC_AUC(ClassificationScore 메서드에 사용됨) 이외의 값이 적용됩니다.

모드

[in] ENUM_AVERAGE_MODE 열거의 평균화 모드. CLASSIFICATION_F1, CLASSIFICATION_JACCARD, CLASSIFICATION_PRECISION 및 CLASSIFICATION_RECALL 메트릭에 사용됩니다.

반환값

계산된 메트릭이 포함된 벡터. AVERAGE_NONE 평균화 모드의 경우 벡터에는 평균화 없이 각 클래스에 대한 메트릭 값이 포함됩니다. (예를 들어 이진 분류의 경우 이는 각각 'false'와 'true'에 대한 두 개의 메트릭이 됩니다).

평균화 모드에 대한 참고 사항

AVERAGE_BINARY는 이진 분류에만 의미가 있습니다.

AVERAGE_MICRO — 총 참양성, 거짓음성, 거짓양성을 계산하여 전역적으로 지표를 계산합니다.

AVERAGE_MACRO — 각 라벨의 메트릭을 계산하고 이들의 비가중 평균을 찾습니다. 이는 라벨 불균형을 고려하지 않습니다.

AVERAGE_WEIGHTED — 각 라벨의 메트릭을 계산하고 지원(각 라벨의 실제 인스턴스 수)을 기준으로 가중치가 부여된 평균을 찾습니다. 이는 라벨 불균형을 설명하기 위해 '매크로'를 변경합니다; 정밀도와 재현율 사이에 있지 않은 F 점수가 나올 수 있습니다.

참조

이진 분류의 경우 첫 번째 열에 음수 레이블에 대한 확률이 포함되고 두 번째 열에 양수 레이블에 대한 확률이 포함된 n x 2 행렬 뿐만 아니라 양수 확률에 대한 하나의 열로 구성된 행렬도 입력할 수 있습니다. 이는 이진 분류 모델이 양성 라벨에 대해 두 개의 확률이나 하나의 확률을 반환할 수 있기 때문입니다..

예:

   vector y_true={7,2,1,0,4,1,4,9,5,9,0,6,9,0,1,5,9,7,3,4,8,4,2,7,6,8,4,2,3,6};
   vector y_pred={7,2,1,0,4,1,4,9,5,9,0,6,9,0,1,5,9,7,3,4,2,9,4,9,5,9,2,7,7,0};
 
   vector accuracy=y_pred.ClassificationMetric(y_true,CLASSIFICATION_ACCURACY);
   Print("accuracy=",accuracy);
   vector balanced=y_pred.ClassificationMetric(y_true,CLASSIFICATION_BALANCED_ACCURACY);
   Print("balanced=",balanced);
   Print("");
 
   vector f1_micro=y_pred.ClassificationMetric(y_true,CLASSIFICATION_F1,AVERAGE_MICRO);
   Print("f1_micro=",f1_micro);
   vector f1_macro=y_pred.ClassificationMetric(y_true,CLASSIFICATION_F1,AVERAGE_MACRO);
   Print("f1_macro=",f1_macro);
   vector f1_weighted=y_pred.ClassificationMetric(y_true,CLASSIFICATION_F1,AVERAGE_WEIGHTED);
   Print("f1_weighted=",f1_weighted);
   vector f1_none=y_pred.ClassificationMetric(y_true,CLASSIFICATION_F1,AVERAGE_NONE);
   Print("f1_none=",f1_none);
   Print("");
 
   vector jaccard_micro=y_pred.ClassificationMetric(y_true,CLASSIFICATION_JACCARD,AVERAGE_MICRO);
   Print("jaccard_micro=",jaccard_micro);
   vector jaccard_macro=y_pred.ClassificationMetric(y_true,CLASSIFICATION_JACCARD,AVERAGE_MACRO);
   Print("jaccard_macro=",jaccard_macro);
   vector jaccard_weighted=y_pred.ClassificationMetric(y_true,CLASSIFICATION_JACCARD,AVERAGE_WEIGHTED);
   Print("jaccard_weighted=",jaccard_weighted);
   vector jaccard_none=y_pred.ClassificationMetric(y_true,CLASSIFICATION_JACCARD,AVERAGE_NONE);
   Print("jaccard_none=",jaccard_none);
   Print("");
 
   vector precision_micro=y_pred.ClassificationMetric(y_true,CLASSIFICATION_PRECISION,AVERAGE_MICRO);
   Print("precision_micro=",precision_micro);
   vector precision_macro=y_pred.ClassificationMetric(y_true,CLASSIFICATION_PRECISION,AVERAGE_MACRO);
   Print("precision_macro=",precision_macro);
   vector precision_weighted=y_pred.ClassificationMetric(y_true,CLASSIFICATION_PRECISION,AVERAGE_WEIGHTED);
   Print("precision_weighted=",precision_weighted);
   vector precision_none=y_pred.ClassificationMetric(y_true,CLASSIFICATION_PRECISION,AVERAGE_NONE);
   Print("precision_none=",precision_none);
   Print("");
 
   vector recall_micro=y_pred.ClassificationMetric(y_true,CLASSIFICATION_RECALL,AVERAGE_MICRO);
   Print("recall_micro=",recall_micro);
   vector recall_macro=y_pred.ClassificationMetric(y_true,CLASSIFICATION_RECALL,AVERAGE_MACRO);
   Print("recall_macro=",recall_macro);
   vector recall_weighted=y_pred.ClassificationMetric(y_true,CLASSIFICATION_RECALL,AVERAGE_WEIGHTED);
   Print("recall_weighted=",recall_weighted);
   vector recall_none=y_pred.ClassificationMetric(y_true,CLASSIFICATION_RECALL,AVERAGE_NONE);
   Print("recall_none=",recall_none);
   Print("");
 
//--- 바이너리 분류
   vector y_pred_bin={0,1,0,1,1,0,0,0,1};
   vector y_true_bin={1,0,0,0,1,0,1,1,1};
 
   vector f1_bin=y_pred_bin.ClassificationMetric(y_true_bin,CLASSIFICATION_F1,AVERAGE_BINARY);
   Print("f1_bin=",f1_bin);
   vector jaccard_bin=y_pred_bin.ClassificationMetric(y_true_bin,CLASSIFICATION_JACCARD,AVERAGE_BINARY);
   Print("jaccard_bin=",jaccard_bin);
   vector precision_bin=y_pred_bin.ClassificationMetric(y_true_bin,CLASSIFICATION_PRECISION,AVERAGE_BINARY);
   Print("precision_bin=",precision_bin);
   vector recall_bin=y_pred_bin.ClassificationMetric(y_true_bin,CLASSIFICATION_RECALL,AVERAGE_BINARY);
   Print("recall_bin=",recall_bin);
 
 
/*
  accuracy=[0.6666666666666666]
  balanced=[0.6433333333333333]
  
  f1_micro=[0.6666666666666666]
  f1_macro=[0.6122510822510823]
  f1_weighted=[0.632049062049062]
  f1_none=[0.8571428571428571,1,0.3333333333333333,0.6666666666666666,0.6666666666666665,0.8,0.5,0.5714285714285715,0,0.7272727272727273]
  
  jaccard_micro=[0.5]
  jaccard_macro=[0.4921428571428572]
  jaccard_weighted=[0.5056349206349205]
  jaccard_none=[0.75,1,0.2,0.5,0.5,0.6666666666666666,0.3333333333333333,0.4,0,0.5714285714285714]
  
  precision_micro=[0.6666666666666666]
  precision_macro=[0.6571428571428571]
  precision_weighted=[0.6706349206349207]
  precision_none=[0.75,1,0.3333333333333333,1,0.75,0.6666666666666666,1,0.5,0,0.5714285714285714]
  
  recall_micro=[0.6666666666666666]
  recall_macro=[0.6433333333333333]
  recall_weighted=[0.6666666666666666]
  recall_none=[1,1,0.3333333333333333,0.5,0.6,1,0.3333333333333333,0.6666666666666666,0,1]
  
  f1_bin=[0.4444444444444445]
  jaccard_bin=[0.2857142857142857]
  precision_bin=[0.5]
  recall_bin=[0.4]
*/