クラス分類したいなら混同行列を忘れないこと

Python
Nishipy
Confusion matrix忘れがちなので、備忘録としてまとめます。

1. はじめに

クラス分類のモデルを評価する指標として、混同行列(Confusion Matrix)が重要らしいです。
知ってはいるけど、詳細を忘れがちなので、自分なりにまとめます。とりあえず、2値分類についてメモしていきます。


2. 定義いろいろ

混同行列(Confusion Matrix)

2値分類の場合、混同行列は2×2の行列です。今回は見やすいように表にします。こんな感じです。

以前の記事(↓)で行ったSmalling/Obama判別を例とします。

機械学習でオバマとスモーリングを判別したい-後編-
Nishipyある界隈で似ていると評判のオバマとスモーリングを、機械学習を使って判別します。後編では、前編で用意した画像を用いて、CNNを学習していきます。1. はじめに1.1. 背景詳しくは、前編の記事をご覧ください...(続く)

(例) 写真がSmallingであるかないかを判断する場合

  • Positive: Smallingである
  • Negative: Smallingでない

であるから、それぞれの値は以下のように説明できます。

  • \(TP\): 正しく、Smallingである判断した数
  • \(FP\): 誤って、Smallingである判断した数
  • \(TN\): 正しく、Smallingでないと判断した数
  • \(FN\): 誤って、Smallingでないと判断した数

精度、適合率、再現率、f-値

混同行列から、以下のような値も導かれますが、これがなかなかややこしい。きっと使ってるうちに覚えるのでしょう。

  • 精度: このモデルの精度は、以下の式で書ける
    $$\frac{TP + TN}{TP + TN + FP+ FN}$$

  • 適合率(precision): 陽性と判断されたものが、実際に陽性であった程度を測定する指標
    $$\frac{TP}{TP + FP}$$

  • 再現率(recall): 実際に陽性であるもののが、陽性と予測された程度を測定する指標。真陽性率。
    $$\frac{TP}{TP + FN}$$

  • f-値: 適合率と再現率の調和平均
    $$F = 2 \times \frac{適合率 \times 再現率}{適合率 + 再現率}$$

受信者動作特性(ROC)曲線、AUC

  • ROC曲線: x軸に偽陽性率(FPR)を、y軸に真陽性率(=再現率)をプロットする。

    • 偽陽性率: 全ての陰性サンプル数に対する、偽陽性サンプル数の割合
      $$\frac{FP}{FP + TN}$$
  • AUC: ROCカーブの下の領域の面積。area under the curveの略。1に近いほどよい。

3. scikit-learnによる実装

今回は、お手軽なsklearn.datasetsの乳がんデータセットを使います。
決定木で分類した時の、混同行列などについて、みていきます。データをロードして、予測結果をy_predとしておきます。

予測するのは、腫瘍が良性か悪性かです。

混同行列(Confusion Matrix)

sklearn.metrics.confusion_matrixを利用します。

[[48 5]
[ 5 85]]

精度、適合率、再現率、f-値

これも、sklearn.metricsからimportして利用できます。

精度:0.930
適合率:0.944
再現率:0.944
f-1値:0.944

ROC曲線、AUC

追記予定


4. さいごに

  • クラス分類のモデルを評価するために、混同がとても重要らしい
  • モデルはだいたい覚えてきたけど、モデルの評価指標を疎かにしがちなので、適宜まとめていきたい

以上

コメント