Help us understand the problem. What is going on with this article?

Pythonではじめる機械学習 モデルの評価と改良(2クラス分類における基準)

学習内容の目次

モデルの評価と改良

  • 2クラス分類における基準

要約

☆2クラス分類における基準

  • 2クラス分類のような簡単なタスクでも,評価には注意点がある
  • 極端に偏ったデータセットなど,タスクによっては必ずしも「精度が高い = 良いモデル」と判断できない
  • つまり90%の正と10%の負が含まれているような偏ったデータでは,評価基準に「精度」を用いるべきではない
  • このため偏ったデータにはconfusion_matrix関数で混同行列を取得する
  • 混同行列の結果をまとめるには「精度 = TP + TN / TP + TN + FP + FN」「適合率(陽性であると予測されたものが,どの程度陽性であったか) = TP / TP + FP」「再現率(陽性のうち,陽性と予測されたもの) = TP / TP + FN」で計算できる
  • しかし適合率と再現率だけでは実際の予測が難しいケースが多いため,これらの平均を取ることが重要である「F(適合率と再現率の平均) = 2 * 適合率 * 再現率 / 適合率 * 再現率」
  • スレッショルドを変更することで,再現率,適合率,データの偏りなどを調整できる
  • precision_recall_curve関数で得られた結果をプロットすることで,適切な再現率と適合率を発見することができる

基本の流れ

In[1]:
from sklearn.datasets import load_digits
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import confusion_matrix

digits = load_digits()
y = digits.target == 9

X_train, X_test, y_train, y_test = train_test_split(
    digits.data, y, random_state=0)

logreg = LogisticRegression(C=0.1).fit(X_train, y_train)
pred_logreg = logreg.predict(X_test)

confusion = confusion_matrix(y_test, pred_logreg)
print("Confusion matrix:\n{}".format(confusion))

Out[1]:
Confusion matrix:
# 401が真陰性,8が偽陰性,2が偽陽性,39が真陽性
[[401   2]
 [  8  39]]

In[2]:
# 偏ったデータに対しては適合率と再現率の平均を求める
from sklearn.metrics import f1_score
print("f1 score logistic regression: {:.2f}".format(f1_score(y_test, pred_logreg)))

Out[2]:
f1 score logistic regression: 0.89

ポイント

☆2クラス分類における基準

  • タスクによって扱う評価基準が異なるため,モデルを用いて何を予測するのかを考えることが大切!
  • だけど経験を積まないと,この分野はどうしても難しい気がする
  • 陽性,陰性,偽陽性(誤って陽性と判断された場合),偽陰性(誤って陰性と判断された場合)の概念は確実に抑えて,各ケースに当てはめる力が必要である

使用想定場面

☆2クラス分類における基準

  • 極端に偏ったデータに対しては混同行列を用いる
  • 偽陽性の数を制限したい場合に適合率を求める
  • 偽陰性を避けたい場合に再現率を求める
  • 偏ったデータセットではこれらを用いて,適合率と再現率の調和平均を求める
Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away