LoginSignup
78

More than 5 years have passed since last update.

マルチラベル分類器の評価指標(Micro-F1/Macro-F1)の振る舞い

Last updated at Posted at 2016-02-13

概要

機械学習で分類問題をするときに、複数のラベルについての予想をしたい場合があります。この際にも分類問題と同じようにRecall, Precision, F値を使用するようです。例えばScikit-learnにも同様に関数は実装されていますし、マルチラベルに対応しています。ただマルチラベルのF値については

  • binary
  • micro
  • macro
  • weighted
  • samples

など、様々な指標が存在するようです。そこで、論文で多く使われているように見えるmicro-F1とmacro-F1が学習データの変化でどう振る舞うのか調べてみました。Excelで(出落ち)。

なお、micro-F1とmacro-F1の計算方法についてはsa-wa-mさんの分類器の学習方法と評価方法1(指標の説明)に纏められています。

パターン1:初期状態

計算結果が1000事例、クラスが10個で、各クラスに正解が100個あるとします。
全クラスに90%の精度で分類が成功したとするとFNとFPは10個ずつとなりますね。

TP FN FP TN SUM Recall Precision F measure
1 90 10 10 890 1000 0.9 0.9 0.9
2 90 10 10 890 1000 0.9 0.9 0.9
3 90 10 10 890 1000 0.9 0.9 0.9
4 90 10 10 890 1000 0.9 0.9 0.9
5 90 10 10 890 1000 0.9 0.9 0.9
6 90 10 10 890 1000 0.9 0.9 0.9
7 90 10 10 890 1000 0.9 0.9 0.9
8 90 10 10 890 1000 0.9 0.9 0.9
9 90 10 10 890 1000 0.9 0.9 0.9
10 90 10 10 890 1000 0.9 0.9 0.9
SUM 900 100 100 8900 10000

この場合でのF値は次にように計算されます。前述したリンクでもあるように

  • Macro-F1:クラスごとのF値の平均
    • (0.9+0.9+...+0.9)/10=0.9
  • Micro-F1:全体のTP,FN.FP,TNを和にしてからF値を計算したもの
    • 2*Micro-R*Micro-P/(Micro-R+Micro-P)=0.9

となります。

Recall Precision F measure
Micro 0.9 0.9 0.9
Macro 0.9 0.9 0.9

パターン2:クラス1だけ割り当てられる事例が極端に多い

テストデータ1000個のうち、クラス1に割り当てられるものが600個と極端に多い場合を考えます。正解率は90%固定です。

TP FN FP TN SUM Recall Precision F measure
1 540 60 60 340 1000 0.9 0.9 0.9
2 90 10 10 890 1000 0.9 0.9 0.9
3 90 10 10 890 1000 0.9 0.9 0.9
4 90 10 10 890 1000 0.9 0.9 0.9
5 90 10 10 890 1000 0.9 0.9 0.9
6 90 10 10 890 1000 0.9 0.9 0.9
7 90 10 10 890 1000 0.9 0.9 0.9
8 90 10 10 890 1000 0.9 0.9 0.9
9 90 10 10 890 1000 0.9 0.9 0.9
10 90 10 10 890 1000 0.9 0.9 0.9
SUM 1350 150 150 8350 10000
Recall Precision F measure
Micro 0.9 0.9 0.9
Macro 0.9 0.9 0.9

クラス1だけ極端に増えましたが、比率が変化しないのでMicro, Macro共に変化はありません。

パターン3:クラス1だけ割り当てられる事例が極端に多く、かつクラス1の正答率だけ極端にいい場合

TP FN FP TN SUM Recall Precision F measure
1 890 10 10 90 1000 0.989 0.989 0.989
2 90 10 10 890 1000 0.9 0.9 0.9
3 90 10 10 890 1000 0.9 0.9 0.9
4 90 10 10 890 1000 0.9 0.9 0.9
5 90 10 10 890 1000 0.9 0.9 0.9
6 90 10 10 890 1000 0.9 0.9 0.9
7 90 10 10 890 1000 0.9 0.9 0.9
8 90 10 10 890 1000 0.9 0.9 0.9
9 90 10 10 890 1000 0.9 0.9 0.9
10 90 10 10 890 1000 0.9 0.9 0.9
SUM 1700 100 100 8100 10000
Recall Precision F measure
Micro 0.944 0.944 0.944
Macro 0.909 0.909 0.909

Microは大きく増加しましたが、Macroの方は増加が鈍くなっています。

パターン4:クラス1の正解率は高いが、割り当てられる数は他と同等の場合

クラス1の割り当てられる数が他とそこまで変わらないながらも、正解率は抜群に良い場合を考えます。

TP FN FP TN SUM Recall Precision F measure
1 99 1 1 899 1000 0.99 0.99 0.99
2 90 10 10 890 1000 0.9 0.9 0.9
3 90 10 10 890 1000 0.9 0.9 0.9
4 90 10 10 890 1000 0.9 0.9 0.9
5 90 10 10 890 1000 0.9 0.9 0.9
6 90 10 10 890 1000 0.9 0.9 0.9
7 90 10 10 890 1000 0.9 0.9 0.9
8 90 10 10 890 1000 0.9 0.9 0.9
9 90 10 10 890 1000 0.9 0.9 0.9
10 90 10 10 890 1000 0.9 0.9 0.9
SUM 909 91 91 8909 10000

Micro, Macroともに同じぐらいの値になりました。

Recall Precision F measure
Micro 0.909 0.909 0.909
Macro 0.909 0.909 0.909

パターン5:クラス1の割当数大、正解率大、クラス2の正解率小

TP FN FP TN SUM Recall Precision F measure
1 890 10 10 90 1000 0.989 0.989 0.989
2 10 90 90 800 990 0.1 0.1 0.1
3 90 10 10 890 1000 0.9 0.9 0.9
4 90 10 10 890 1000 0.9 0.9 0.9
5 90 10 10 890 1000 0.9 0.9 0.9
6 90 10 10 890 1000 0.9 0.9 0.9
7 90 10 10 890 1000 0.9 0.9 0.9
8 90 10 10 890 1000 0.9 0.9 0.9
9 90 10 10 890 1000 0.9 0.9 0.9
10 90 10 10 890 1000 0.9 0.9 0.9
SUM 1620 180 180 8010 9990

MicroではまぁまぁのF値を保持していますが、Macroでは随分落ち込んでしまいました。

Recall Precision F measure
Micro 0.9 0.9 0.9
Macro 0.829 0.829 0.829

まとめ

パターン3, 4からScikit-learnのMacro-F1の説明や、前述のリンク先でも説明されている通り、Micro-F1はクラスサイズを考慮して、Macro-F1がクラスのサイズを考慮しないことが分かったと思います。
一方で、パターン5で示したように、Macro-F1を使うとクラスサイズが小さくてMicro-F1では見えないような、一部分で性能が落ち込んでいる時に評価が可能となるようです。

2つの指標の使い分けが良くわかっていない部分も多いので、マサカリがありましたら、宜しくお願い致します。

参考

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
78