知っていることだけ

勉強していて役に立つ、理解の助けになるようなポイントを書いていきます。

評価基準とスコア 「Pythonではじめる機械学習」まとめ

[Pythonではじめる機械学習-scikit-learnで学ぶ特徴量エンジニアリングと機械学習の基礎, 2017]の「5.3 評価基準とスコア」 (p270~298)で学んだこと。

指標「精度」の欠点

pythonのsklearnはscore()で簡単に学習モデルの性能を評価できる。

クラス分類性能は精度、回帰性能はR^2である。

しかしこの指標だと、偏ったデータセットに対して上手く機能しない。

ex)1割の人しかかからない病気には、取り敢えず陰性と予測したら9割方当たってしまう。

混同行列(confusion matrix)

2クラス分類に関しては、上記の欠点を克服するツールとして、混同行列がある。

 

f:id:protoidea:20190210130811p:plain

2クラス分類の混同行列

 pythonでは

from sklearn.metrics import confusion_matrix

で使える。

混同行列を用いた指標として、適合率、再現率、f-値などがある。

これらをまとめた結果は、

from sklearn.metrics import classification_report

で得られる

クラス分類と閾値

クラス分類の結果が0,1ではなく確率で与えられるモデルでは、陽性、陰性を判断する閾値をパラメータと持つことができる。

ex)・閾値が0.5の場合(これがデフォルト)。陽性の確率+陰性の確率=1であるので、陽性の確率>陰性の確率を基準にしているのと同義である。

閾値0.3の場合。陽性の確率が30%を下回らない限り陽性と判断する。これにより陽性と判断しやすいモデルが作られる。

sklearnではdecision_functionかpredict_probaで不確実性を予測する。

適合率-再現率カーブとROCカーブ

同じ学習モデルでも、閾値によって結果の様相が異なる。トレードオフの関係にある2指標をグラフにすることで作りたい製品に最適な閾値を見つける.

適合率-再現率カーブ

 閾値を変えたときの適合率、再現率の組み合わせをグラフにしたものが適合率再現率カーブである。グラフが右上に行っているほど良い学習モデルと言える

from sklearn.metrics import precision_recall_curve

にある。

 

f:id:protoidea:20190213101154p:plain

適合率-再現率カーブ

ROCカーブ(receiver operating characteristics curve

偽陽性率FPR(false positive rate)と真陽性率TPR(true positive rate)の関係.グラフが左上にあるほど良い学習モデルと言える

from sklearn.metrics import roc_curve にある

f:id:protoidea:20190213101117p:plain

ROCカーブ

カーブ下の領域の面積AUC(area under the curve)を用いて指標とすることもできる。

from sklearn.metrics import roc_auc_score

で計算できる。

まとめ

  • テストデータを学習に使わないように注意。交差検証がよく使われるツールである
  • 評価基準は多数ある。求める結果に即した評価指標を選択する必要がある。