Warning: Undefined variable $position in /home/pystyles/pystyle.info/public_html/wp/wp-content/themes/lionblog/functions.php on line 4897

機械学習 – 混同行列、真陽性、真陰性、偽陽性、偽陰性について

機械学習 – 混同行列、真陽性、真陰性、偽陽性、偽陰性について

概要

クラス分類モデルを評価するときに使用する混同行列、真陽性 (TP)、真陰性 (TN)、偽陽性 (FP)、偽陰性 (FN) について解説します。

Advertisement

混合行列 (confusion matrix)

混合行列 (confusion matrix) は、クラス分類モデルの性能を確認するための行列です。 行列の $(i,j)$ 成分はクラス $i$ のサンプルをクラス $j$ と分類した数を表します。 混同行列という名前は、この行列を見ることで、モデルが2つのクラスをどのように混同したかどうかを判断できることに由来します。

クラス $1, 2, \cdots, m$ の混同行列は以下のようになります。

混合行列

混同行列は scikit-learn の sklearn.metrics.confusion_matrix() で作成できます。

In [1]:
from sklearn.metrics import confusion_matrix

y_true = [2, 0, 2, 2, 0, 1]  # 正解ラベル
y_pred = [0, 0, 2, 2, 0, 2]  # 予測ラベル

C = confusion_matrix(y_true, y_pred)
print(C)
[[2 0 0]
 [0 0 1]
 [1 0 2]]

2クラス分類の場合

正例 (positive) と 負例 (negative) がある2クラスのデータセットにおいて、次の用語が定義されます。

真陽性 (TP)

クラス positive のサンプルをクラス positive と分類した数を真陽性 (True Positive, TP) といいます。 positive と分類したのが正解なので、正解した正例 (True Positive) と覚えます。

真陰性 (TN)

クラス negative のサンプルをクラス negative と分類した数を真陰性 (True Negative, TN) といいます。 negative と分類したのが正解なので、正解した負例 (True Negative) と覚えます。

Advertisement

偽陽性 (FP)

クラス negative のサンプルをクラス positive と分類した数を偽陽性 (False Positive, FP) といいます。 positive と分類したのが不正解なので、不正解した正例 (False Positive) と覚えます。

偽陰性 (FN)

クラス positive のサンプルをクラス negative と分類した数を偽陰性 (False Negative, FN) といいます。 negative と分類したのが不正解なので、不正解した負例 (False Negative) と覚えます。

TP、FP、TN、FN と混同行列の対応

2クラスの混同行列の場合、TP、FP、TN、FN は以下のように対応します。

2クラスの混同行列

In [2]:
from sklearn.metrics import confusion_matrix

y_true = [0, 1, 0, 1, 1, 1]  # 正解ラベル
y_pred = [0, 1, 1, 0, 0, 0]  # 予測ラベル

C = confusion_matrix(y_true, y_pred)
print(C)
print(f"TN: {C[0, 0]}, FP: {C[0, 1]}, FN: {C[1, 0]}, TP: {C[1, 1]}")
[[1 1]
 [3 1]]
TN: 1, FP: 1, FN: 3, TP: 1