本日のまとめ(モデルの評価、チューニング)

パイプラインによるワークフローの効率化

  • make_pipelineは、入力としてsklearnの変換器(ex.StandardScaler, PCA)と、推定器(ex. LogisticRegression)を受け取る
  • 変換器はいくつ指定してもよい
  • 変換器は、fit & transform, 推定器はfit & predictをもつ
  • pipelienのfit()コール時は、変換器はfit & transformを実行し、最終的に推定器のfitが実行される
  • pipelineのpredict()コール時は、変換器はtransformを実行し、最終的に推定器のpredict()が実行される

k分割交差検証を使ったモデル性能評価

  • 学習不足(バイアス高)と、過学習(バリアンス高)のバランスをとるために、ホールドアウト法と、K分割交差検証という手法を利用する

ホールドアウト法の概要

k分割交差検証

  • モデルのチューニングに利用される
  • ホールドアウト法の強化版がk分割交差検証と思えばよい。
  • レーニングデータセットをランダムにk個に分割し、そのうちk-1個をトレーニング、1個を性能の評価に使用する
  • 個々のサブセットに基づいて、モデルの平均性能を計算する
  • 充分なハイパーパラメータが見つかったら、トレーニングデータセット全体でモデルを再トレーニングする→トレーニングサンプルは多ければ多いほうが良いため。
  • k分割交差検証は非復元再抽出法
  • 大体はk=10を使用する。サンプルが多い場合は、時間かかるので、k=5にしたりする。サンプルが少ない場合は、kを大きくしたりする。
  • 層化k分割交差検証(stratified k-fold cross-validation)では、各サブセットでクラスの比率を維持する

学習曲線と検証曲線によるアルゴリズムの診断

  • scikit-learnのlearning_curveを使用する。デフォルトで、層化k分割交差検証を使って交差検証の正解率を計算する -検証曲線は、サンプルサイズではなくパラメータの値を変化させたときのスコアをプロットする。
  • 検証曲線を描くにはvalidation_curveを使用する

グリッドサーチによる機械学習モデルのチューニング

  • GridSerachCVクラスにより、様々なハイパーパラメータから最適解を求められる

入れ子式交差検証によるアルゴリズムの選択

  • パラメータチューニングを、外と内で分けて実施。例えば、5*2など。

様々な性能評価指標

  • 適合率(precision), 再現率(recall), F1-score

混同行列

  • 混同行列は、真陽性(true positive)・偽陽性(false positive)・真陰性(true negative)・偽陰性(false negative)を報告する正方行列
  • scikit-learnではconfusion_matrix関数が用意されている

誤分類率・再現率、適合率、F1

  • 誤分類率,(ERR) 再現率(ACC)は以下のように表される

ERR = \frac{FP + FN}{FP + FN + TP + TN} \\
ACC = \frac{TP + TN}{FP + FN + TP + TN} = 1 -ERR

  • 真陽性率(TPR),偽陽性率(FPR)は、以下のようにあらわされる

FPR = \frac{FP}{FP + TN} \\
TPR = \frac{TP}{TF + FN}

  • 適合率(PRE) , 再現率(REC)は以下尿に表される

PRE = \frac{TP}{TP + FP} : 陽性と判断した中の、真陽性 \\
REC = TPR = \frac{TP}{TF + FN}:全陽性のうち、陽性と判断したもの

-GridSearchのscoringに上記の指標を用いることも可能 - 適合率(PRE)と再現率(REC)を組み合わせてたF1-scoreがよく使用される


F1 = 2 \frac{PRE \times REC}{PRE + REC} 

  • これらはsklearn.metrics モジュールからインポートできる

ROC曲線

  • Receiver Operation Characteristic 曲線
  • ROC曲線では、真陽性率(TPR) と、偽陽性率(FPR)が選択の基準となる。
  • 対角線がランダムな推定として解釈でき、対角線を下回るものはランダムよりも劣る。
  • 完璧なものは左上隅にプロットされる

不均衡なデータ

  • はじめからサンプルに90:10のようなかたよりがある場合、適当に答えても正解率は90になる。
  • 上記のような場合、正解率以外の指標がより重要になる
  • 多数派の患者として特定することが優先される場合は、再現率を重視
  • スパムメールは、間違ったものをラベル付けしないため、適合率重視
  • 学習時も、最適化のさいに、偏ったデータセットにひきずられる →少数派クラスに関する誤った予測に大きなペナルティを科す。これは、class_weight='balanced'を選択すればよい
  • 少数派クラスのアップサンプリング(サンプルの個数が同じになるまで、繰り返し抽出する)に役立つresampleという関数がある