Deep Karmaning

技術系の話から日常のことまで色々と書きます

多クラス分類におけるAccuracyとF1スコアのマイクロ平均は同じ

多クラス分類におけるAccuracyとF1スコアのマイクロ平均が同じ値になることを知ったので、メモとして書き残しておきます。

クラス分類における各種指標の計算式は以下が詳しいです。 ibisforest.org

マイクロ平均とマクロ平均の違いは以下が詳しいです。

www.haya-programming.com

マイクロ平均とマクロ平均の違いを簡潔には以下のとおりだと捉えています。

  • マクロ平均は各クラスごとに指標を算出してから平均をとる
  • マイクロ平均は全クラスでいっせいに指標を計算する

マクロ平均はクラスの件数に偏りがあり、そういったクラスの指標の良し悪しを全体的な指標として反映させたい時に使うといいのかなと思います。マイクロ平均はそういったところを無視しても良いときに使うといいと思います。

本題

実際にダミーの混同行列をもとに多クラス分類のAccuracyとF1スコアのマイクロ平均を計算してみます。 ここでは以下の混同行列を考えます。

クラス1(真) クラス2(真) クラス3(真)
クラス1(予測) 10 3 5
クラス2(予測) 2 20 1
クラス3(予測) 3 15 2

この場合の正解率は対角の合計を全体のサンプルサイズで割れば良いため以下のとおりです。

  • Accuracy = 32 / 61 = 0.52

一方F1スコアのマイクロ平均は以下のようになります。まずはTrue Positive(TP)、 False Positive(FP)、False Negative(FN)を計算します。

  • TP = 10 + 20 + 2 = 32
  • FP = (3 + 5) + (2 + 1) + (3 + 15) = 29
  • FN = (2 + 3) + (3 + 15) + (5 + 1) = 29

次にRecallとPrecisionを計算します。

  • Recall = TP / (TP + FN) = 32 / (32 + 29) = 0.52
  • Precision = TP / (TP + FP) = 32 / (32 + 29) = 0.52

これらの結果からF1スコアを計算します。

  • F1 = (2 * (Recall * Precision)) / (Recall + Precision) = (2 * (0.52 * 0.52)) / (0.52 + 0.52) = 0.52

以上のように多クラス分類におけるAccuracyとマイクロ平均のF1スコアが一致することがわかります。

まとめ

これまでなんとなくライブラリを用いて計算していた指標ですが、きちんと計算式を確認してから計算してみると、名前が異なっても一致するものがあることがわかりました。

今後はこういったことにも気をつけながら、指標を理解し使っていきたいと思います。

それでは間違い等有りましたらご指摘お願いいたします。