学習内容の目次
モデルの評価と改良
- 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クラス分類における基準
- 極端に偏ったデータに対しては混同行列を用いる
- 偽陽性の数を制限したい場合に適合率を求める
- 偽陰性を避けたい場合に再現率を求める
- 偏ったデータセットではこれらを用いて,適合率と再現率の調和平均を求める