不均衡なカテゴリを使用して、マルチクラス分類を行っています。
f1 は常に適合率と再現率の直接調和平均よりも小さく、場合によっては f1 が適合率と再現率の両方よりもさらに小さいことに気付きました。
metrics.precision_score(y,pred)
参考までに、精度などを求めました。
私はミクロ平均とマクロ平均の違いを認識しており、 のカテゴリ結果を使用してミクロではないことをテストしましたprecision_recall_fscore_support()
。
これは、マクロ平均が使用されているためか、その他の理由によるものかわかりませんか?
以下のように詳細な結果を更新しました。
n_samples: 75、n_features: 250
MultinomialNB(alpha=0.01, fit_prior=True)
2 倍の CV:
1 回目の実行:
F1: 0.706029106029
Precision: 0.731531531532
Recall: 0.702702702703
precision recall f1-score support
0 0.44 0.67 0.53 6
1 0.80 0.50 0.62 8
2 0.78 0.78 0.78 23
avg / total 0.73 0.70 0.71 37
2 回目の実行:
F1: 0.787944219523
Precision: 0.841165413534
Recall: 0.815789473684
precision recall f1-score support
0 1.00 0.29 0.44 7
1 0.75 0.86 0.80 7
2 0.82 0.96 0.88 24
avg / total 0.84 0.82 0.79 38
全体:
Overall f1-score: 0.74699 (+/- 0.02)
Overall precision: 0.78635 (+/- 0.03)
Overall recall: 0.75925 (+/- 0.03)
Scholarpediaからのマイクロ/マクロ平均化に関する定義:
マルチラベル分類では、カテゴリ全体の集計スコアを計算する最も簡単な方法は、すべてのバイナリ タスクのスコアを平均することです。結果のスコアは、マクロ平均再現率、精度、F1 などと呼ばれます。平均化の別の方法は、最初にすべてのカテゴリの TP、FP、TN、FN、および N を合計してから、上記の各メトリックを計算することです。結果のスコアは、マイクロ平均と呼ばれます。マクロ平均は、各カテゴリに等しい重みを与え、多くの場合、べき乗のような分布でまれなカテゴリ (多数) でのシステムのパフォーマンスによって支配されます。マイクロ平均は、各ドキュメントに均等な重みを与え、多くの場合、最も一般的なカテゴリでのシステムのパフォーマンスによって支配されます。
これは、 Github で現在未解決の問題#83 です。
次の例は、マイクロ、マクロ、および加重 (Scikit-learn の現在の) 平均化がどのように異なるかを示しています。
y = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2]
pred = [0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1, 2, 0, 1, 2, 2, 2, 2]
混同行列:
[[9 3 0]
[3 5 1]
[1 1 4]]
Wei Pre: 0.670655270655
Wei Rec: 0.666666666667
Wei F1 : 0.666801346801
Wei F5 : 0.668625356125
Mic Pre: 0.666666666667
Mic Rec: 0.666666666667
Mic F1 : 0.666666666667
Mic F5 : 0.666666666667
Mac Pre: 0.682621082621
Mac Rec: 0.657407407407
Mac F1 : 0.669777037588
Mac F5 : 0.677424801371
上記の F5 は F0.5 の省略形です...