本文へスキップ
BecomeCoder

Python AIコース · 第4章 モデルを正しく評価する · レッスン14

混同行列と適合率・再現率

ブラウザで完結

導入

正解率だけでは見えないことがあります。「どのカテゴリをどう間違えたか」を表にしたのが混同行列。そこから計算する適合率再現率は、実務で欠かせない指標です。

説明

confusion_matrix は「正解 × 予測」の表を作ります。対角線が正解、それ以外が間違いです。classification_report は適合率・再現率をまとめて出します。

from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import confusion_matrix, classification_report

iris = load_iris()
X_train, X_test, y_train, y_test = train_test_split(
    iris.data, iris.target, test_size=0.3, random_state=1
)
model = DecisionTreeClassifier(max_depth=3, random_state=0)
model.fit(X_train, y_train)
pred = model.predict(X_test)

print("--- 混同行列(行=正解, 列=予測)---")
print(confusion_matrix(y_test, pred))
print("--- 成績表 ---")
print(classification_report(y_test, pred, target_names=iris.target_names))

混同行列の対角線の数字が正しく当てた件数です。対角線から外れた数字は「取り違え」を表します。

  • 適合率(precision):「そのカテゴリだと予測したもの」のうち、本当に正しかった割合。
  • 再現率(recall):「実際にそのカテゴリだったもの」のうち、正しく拾えた割合。

たとえば病気の検査では、見逃しを減らしたいので再現率が重視されます。目的に応じて見る指標が変わる、というのが大切なポイントです。

やってみよう

max_depth=1 にすると混同行列の間違い(対角線以外)が増え、適合率・再現率が下がるのを確かめましょう。

演習

上のコードで、テストデータの混同行列confusion_matrix で作って print で表示してください。

ヒント1を見る

print(confusion_matrix(y_test, pred))

実際に動かしてみよう

下のエディタにPythonを書いて「実行」を押すと、scikit-learn で本物の機械学習モデルをその場で訓練できます。scikit-learn を使う回は初回の読み込みに時間がかかります(数十秒かかることがあります)。本文の例をそのまま試したり、数値を書き換えたりして、結果の変化を確かめましょう(グラフ内の文字は英字で書きます)。

Python — ライブラリ付きで実行(Pyodide)

numpy / pandas / matplotlib が使える本物のPython(Pyodide)を読み込みます。初回のみ読み込みに少し時間がかかります(以降はブラウザにキャッシュされます)。
スクロールして表示された時点でも自動で読み込まれます。