Pythonによる多クラス混同行列の作成と評価指標の計算

Pythonを使って多クラス混同行列を作り、評価指標を計算してみましょう。

混同行列はsklearn.metricsパッケージを使うと非常に簡単に計算することができますので、Excelで計算させるよりもパッとPythonでやってしまいましょう。

混同行列についてはこちらをご覧ください。

多クラス混同行列とその評価指標〜マクロ平均、マイクロ平均〜

混同行列を作成する

ここでは一例として、じゃんけんの手の画像を見せて、それが「グー」「チョキ」「パー」のいずれなのかを判断させるAIを考えます。

まず、混同行列を書くという事は、「正解データ」と「推測データ」が存在しているはずです。
それでは正解データ10枚に対して、AIの推論結果は以下になったとします。

正解 推論
グー グー
チョキ チョキ
パー パー
パー チョキ
パー チョキ
パー チョキ
グー グー
チョキ パー
パー グー
グー グー

この情報をリスト化して、confusion_matrixメソッドを使うと。。。

あっという間に混同行列が出てきました。
ちなみに、confusion_matrixの引数のlabelsに順番を指定すると、混同行列の列と行がその順番に並びます。

また、以下のようにすれば結果をExcelに吐き出すことができます。

今回は3×3なので良いですが、100×100くらいになってくると出来上がった表はExcelで見たほうが分かりやすいかもしれません。

評価指標を計算する

さて、お次は混同行列における評価指標のうち、「正解率」「再現率」「適合率」「F値」を出してみます。
こちらも、それぞれ1行で計算できる便利メソッドが準備されています。

正解率(Accuracy)

正解率は混同行列全体に対して1つだけ計算されます。

正解率は0.5と計算されました。
10個中、5個正解しているので正しい答えのようです。

再現率(Recall)

再現率はクラスごとに計算されます。

「グー」の再現率は1.0、「チョキ」の再現率は0.25、「パー」の再現率は0.5だと分かりました。
ちなみに、全ての再現率を平均した値を知りたければ、引数average=”macro”を指定すればOKです。

適合率(Precision)

適合率はクラスごとに計算されます。

「グー」の適合率は0.75、「チョキ」の適合率は0.25、「パー」の適合率は0.5だと分かりました。
こちらも引数average=”macro”とすれば平均値が出せます。

F値

F値もクラスごとに計算されます。

「グー」のF値は約0.86、「チョキ」のF値は0.33、「パー」のF値は0.29だと分かりました。
こちらも引数average=”macro”とすれば平均値が出せます。

まとめ

これで、Pythonで混同行列とその評価指標が計算できました。
ほんの数行で計算できますので、是非活用して頂ければと思います。