scikit-learnで混同行列を求める
python向け機械学習ライブラリであるscikit-learnを使って、混同行列を計算します。
scikit-learnのインストール
多くの場合は下記コマンドでインストール可能です。 より詳しいインストール方法は公式ドキュメントを参照してください。
pipの場合
pip install -U scikit-learn
Anacondaの場合
conda install -c conda-forge scikit-learn
import
scikit-learnからconfusion_matrix関数を読み込みます。
from sklearn.metrics import confusion_matrix
使用するデータの定義
y_true = [0, 0, 0, 0, 0, 1, 1, 1, 1, 1] y_pred = [0, 1, 0, 0, 0, 1, 0, 1, 0, 1]
y_true
が正解ラベル、y_pred
が予測ラベルです。
陽性を1、陰性を0とします。
混同行列の計算
confusion_matrix関数の第一引数に正解ラベル、第二引数に予測ラベルを与え、混同行列を計算します。
# 混同行列の計算 ((tn, fp), (fn, tp)) = confusion_matrix(y_true, y_pred) # 結果表示 print("TP", tp) print("TN", tn) print("FP", fp) print("FN", fn)
結果は次の通りになります。
TP 3 TN 4 FP 1 FN 2
- True Positive(TP):正解が陽性で予測も陽性
- True Negative(TN):正解が陰性で予測も陰性
- False Positive(FP):正解が陰性で予測が陽性
- False Negative(FN):正解が陽性で予測が陰性
その他評価指標の計算
混同行列さえ計算できれば、あとは単純な数値計算によりAccuracy、Precision、Recallの計算が可能です。
# 評価指標計算 accuracy = (tp + tn) / (tp + tn + fp + fn) recall = tp / (tp + fn) precision = tp / (tp + fp) # 結果表示 print("Acc", accuracy) print("Rec", recall) print("Pre", precision)
結果は次の通りになります。
Acc 0.7 Rec 0.6 Pre 0.75
- Accuracy:全データ中、陽性・陰性を正しく当てられたものの割合
- Recall:正解が陽性であるもののうち、予測で陽性と判定されたものの割合
- Precision:予測で陽性と判定されたもののうち、正解が陽性であるものの割合