○この記事の要点
2,3回勉強しているのに、混合行列が覚えられません。
覚えるためにコードとともにアウトプットします。
#○ソースコード(Python)
from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix
from sklearn.metrics import accuracy_score
from sklearn.metrics import precision_score
from sklearn.metrics import recall_score
from sklearn.metrics import f1_score
import numpy as np
# 乳がんデータのダウンロード
data = load_breast_cancer()
X = data.data
# ラベルの0と1を反転(データセットは0が悪性、1が良性だが、0を良性、1を悪性と扱いたい)
y = 1 - data.target
X = X[:, :10]
# ロジスティック回帰モデル
model = LogisticRegression()
# 学習
model.fit(X, y)
# 予測
predict = model.predict(X)
# 混合行列の表示用インスタンス
cm = confusion_matrix(y, predict)
#混合行列
print(cm)
[[337 20]
[ 30 182]]
左上から右へ順にTN、FP、FN、TP
TN:実際にはネガティブのデータを正しくネガティブと予測したもの
今回の例だと、良性のデータを正しく良性と予測したもの
FP:実際にはネガティブのデータを間違えてポジティブと予測したもの
今回の例だと、良性のデータを間違えて悪性と予測したもの
FN:実際にはポジティブのデータを間違えてネガティブと予測したもの
今回の例だと、悪性のデータを間違えて良性と予測したもの
TP:実際にはポジティブのデータを正しくポジティブと予測したもの
今回の例だと、悪性のデータを正しく悪性と予測したもの
がんの予測としては、FN(悪性のデータを間違えて良性と予測したもの)はやばい。
正解率
予測結果全体に対し、正しく予測できたものの割合
正解率 = (TP + TN) / (TP + TN + FP + FN)
accuracy_score(y, predict)
0.9121265377855887
適合率
ボジティブと予測したものに対し、正しくポジティブと予測できたものの割合
適合率 = TP / (TP + FP)
precision_score(y, predict)
0.900990099009901
再現率
ボジティブのものに対し、正しくポジティブと予測できたものの割合
再現率 = TP / (TP + FN)
recall_score(y, predict)
0.8584905660377359
F値
適合率と再現率の両方の傾向を反映させた値
F値 = 2×(適合率×再現率)/(適合率+再現率)
f1_score(y, predict)
0.8792270531400966
■感想
・毎回定義を読むたび納得するのだが、しばらくすると忘れる。。。
・実際に使う時にパッと出てくるようにしないと。。。