LoginSignup
3
5

More than 3 years have passed since last update.

機械学習 混合行列について

Last updated at Posted at 2020-05-04

○この記事の要点
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×(適合率×再現率)/(適合率+再現率)
F値
f1_score(y, predict)
0.8792270531400966

■感想
・毎回定義を読むたび納得するのだが、しばらくすると忘れる。。。
・実際に使う時にパッと出てくるようにしないと。。。

3
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5