メモめもメモ

環境構築やプログラミングに関するメモ

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:予測で陽性と判定されたもののうち、正解が陽性であるものの割合