読者です 読者をやめる 読者になる 読者になる

分類性能とMAE

機械学習

名刺お疲れ様でした。 終盤はGPUメモリ足りないとイライラしていましたが、足りないのは創意工夫でした。

私はMXNetを使って取り組んでました。multi-inputとかmulti-outputのやり方を泣きながら調べたのも良い思い出です。

その話はまた時間があればまとめます。今日は軽いネタを一つ。

本題

今回のコンペはマルチラベル問題で、評価指標はMAEでした。 サンプル数が  N で、そのインデックスを  i とします。同様にクラス数が  M で、そのインデックスを  j とします。  i 番目のサンプルの クラス  j に対するフラグを  y_{i,j}、予測値を  f_{i,j} と表します。

MAE(Mean Absolute Error)は

{\displaystyle
\mathrm{MAE} =
\frac{1}{NM} \sum_{1 \leq i \leq N} \sum_{1 \leq j \leq M}
\left| y_{i,j} - f_{i,j} \right|
}

で計算します。

このとき、 f は確率ではなくフラグにしないと殆どの場合で損するはずです。 MAEにはmedianを返すのがお約束なので、これ以上は不要な説明かもしれませんが、泥臭くやってみます。

何らかの機械学習で得た予測値  g_{i,j} があるとして、これを  \Delta_{i,j} で補正した  f_{i,j} = g_{i,j} + \Delta_{i,j} を予測値にします。

補正したことによるMAEの改善幅は

 {\displaystyle
q_{i,j} \Delta_{i,j} - \left( 1 - q_{i,j} \right) \Delta_{i,j}
= \Delta_{i,j} \left( 2 q_{i,j} - 1 \right)
}

となります。  q_{i,j} y_{i,j} = 1 となる確率とか確信度とかそういった数字です。 先の機械学習モデルがまともなものであれば、 q_{i,j} g_{i,j} で代用できるでしょう。 そうすると、 g_{i,j} \geq 0.5 では  f_{i,j} = 1 にすべきですし、 g_{i,j} \leq 0.5 では  f_{i,j} = 0 にすべきです。

したがって、評価指標は実際にはAccuracyになってしまっていたんじゃないか、というお話です。

以下のチュートリアルでも、特に説明はありませんが確率でなくフラグを出力しています。

コンテストチュートリアル(Sansan)

余談

分類器の性能をMAEで評価するのは意味がないと個人的には考えるのですが、そのようなペーパーも少ないながら発見できます。 以下のような表で比較をしていたりします。

classifier Accuracy MAE RMSE
clf1
clf2

著者がインド系の方が多いので、インドの偉い先生の好みだったりするんでしょうか。 日本人がMAEで分類性能を評価しているものを見つけてオッと思ったら指導教官がインド系の先生だったりもしました。