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] 真の値のベクトル

metric

[in] ENUM_CLASSIFICATION_METRIC列挙体からの指標型CLASSIFICATION_TOP_K_ACCURACY、CLASSIFICATION_AVERAGE_PRECISION、CLASSIFICATION_ROC_AUC(ClassificationScoreメソッドで使用)以外の値が適用されます。

mode

[in] ENUM_AVERAGE_MODE列挙の平均化モード。CLASSIFICATION_F1、CLASSIFICATION_JACCARD、CLASSIFICATION_PRECISION、CLASSIFICATION_RECALL指標に使用されます。

戻り値

計算された指標を含むベクトル。AVERAGE_NONE平均化モードの場合、ベクトルには平均化を行わない各クラスの指標値が含まれます。(たとえば、二項分類の場合、それぞれ「false」と「true」の2つの指標)。

平均化モードに関する注意事項

AVERAGE_BINARY:二項分類にのみ意味があります。

AVERAGE_MICRO:真陽性、偽陰性、偽陽性の合計をカウントすることにより、指標をグローバルに計算します。

AVERAGE_MACRO:各ラベルの指標を計算し、加重されていない平均を見つけます。これにはラベルの不均衡は考慮されていません。

AVERAGE_WEIGHTED:各ラベルの指標を計算し、サポートによって重み付けされた平均(各ラベルの真のインスタンスの数)を見つけます。これにより、ラベルの不均衡を考慮して「マクロ」が変更されます。精度と再現率の間にないF値が発生する可能性があります。

注意事項

二項分類の場合、最初の列に負のラベルの確率が含まれ、2番目の列に正のラベルの確率が含まれるn x 2行列だけでなく、正の確率を含む1つの列で構成される行列も入力できます。これは、二項分類モデルが陽性ラベルに対して2つの確率または1つの確率を返すことができるためです。

例:

  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("");
 
//--- binary classification
  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]
*/