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