machine learning, week 6

機械学習モデルの検証の話.モデルの評価方法とその改善方法について.

Cross Validation(交差検定)は,集めてきたデータの一部をテスト用に取っておくやり方で,これにより新しくテストセットを取る必要がなくなる.

しかし,このテストセットを使ってパラメータチューニングを行うと,当然そのテストデータにOverfitting(High Variance)してしまう.すなわち,モデルをテストセットに合わせて変えてしまったので、そのモデルがテストセットで良い精度を示すのは当然.こうすると一般化エラー(Generalization error)を甘く見積もってしまう.

そこで,データを三分割する.

  • Training set: 60%
  • Cross validation set: 20%
  • Test set: 20%

こうすると,

  1. Training setだけを使ってモデルパラメーターを探し、モデルを作る
  2. そのモデルの精度を、Cross Validation setを使って確かめる
  3. モデル精度が悪ければ、Cross Validation setでの精度が上がるようモデルを作り直す
  4. 最終的にできたモデルをTest setに適用し、一般化エラー (Generalization Error) を推定する

この時,モデルパラメーターを推定するのにCross Validation set 及び Test set を使ってはいけない.また,Cross Validation setとTest setの違いはCross Validation setではモデルに戻ってモデルパラメーターを変えて精度を上げることが許されているが,Test setは最終的にできたモデルの精度を確認するだけで,その精度を上げるようにモデルを作り変えることはしてはならない.

そして,良いモデルとはTraining setでもCross Validation setでもTest setのいずれでも小さいエラーを示す.

また,Training setでもCross Validation setでもTest setのいずれでも高いエラーを示す場合,そのモデルはUnderfit(High Bias)しているという.

Training setでは小さいエラーであるがCross Validation setやTest setで高いエラーを示す場合,そのモデルはOverfit(High Varianve)しているという.

学習したモデルのエラーは次式で書ける.

 \displaystyle J(\theta)=\dfrac{1}{2m}\sum_{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2+\dfrac{\lambda}{2m}\sum_{j=1}^{m}\theta_j^2

第一項はモデルの予測値h_{\theta}(x) と実際の値yの差の二乗したものの各データでの和

第二項は正規化項で,overfitに対処するために正規化パラメータ\lambda を導入した.

この\lambda は下図のCross validation errorが最小となる点を選ぶ.なぜなら,左の方に行けばTrain error, Cross Validation error共に高くHigh Bias.右の方に行けばTrain errorは低いが Cross Validation errorが高くHigh Varianceを示すから.

Screen Shot 2017-04-02 at 7.02.36.png

対処法のまとめは次の通り

Underfit(High Bias)ならば…

  • 別の説明変数 (feature)を探す
  • 多項変数 (x_1^2, x_1x_2など)を追加する
  • 正規化パラメーター\lambdaを小さくする

Overfit(High Variance)ならば…

  • トレーニングデータ数を増やす
  • 説明変数 (feature)を減らす
  • 正規化パラメーター\lambdaを大きくする

講義中,何度も出てくる表現に「トレーニングデータを増やすのはモデルがOverfitしている時だけだ」というものがある.一般的にトレーニングデータの収集には時間がかかるので,Ng先生のこの忠告はよく覚えておこう.

話は少し変わり,集めてきたデータが偏っているという場合がある.

例えば,二値分類で1が99%,0が1%のTraining setであった時,いつも1を返すモデルは99%の精度を示すが,そのモデルは一般化エラーが低いと言えるだろうか.

このように偏りのあるデータ (skewed data)を扱う場合,分類精度 (Classification Accuracy)は信用できないので,代わりにF値(F score)を使う.

Predicted \ Actual Actual 1 Actual 0
Predicted 1 True Positive(真陽性) False Positive(偽陽性)
Predicted 0 False Negative(偽陰性) True Negative(真陰性)

これが仮にガン検査の結果だとすると,

真陽性:あなたは本当にガンです.

偽陽性:ガンではないがガンだと診断されてしまいました(精密検査でガンじゃないと分かってラッキー)

偽陰性:本当はガンなのにガンではないと診断されてしまった!ぬかよろこび!大変!

真陰性:あなたは本当にガンではないです.良かったですね.

そして,これらに次のPrecision(適合率), Recall(再現率)という指標を入れる.

Precision=\dfrac{\#(TruePositive)}{\#(TruePositive)+\#(FalsePositive)}

Recall=\dfrac{\#(TruePositive)}{\#(TruePositive)+\#(FalseNegative)}

適合率はy=1と予測したうち,実際にy=1な割合.この例だと,ガンと一次診断した人の中の一体何人が精密検査でガンであったかの割合.

再現率は実際にy=1であるうち,正しくy=1であると予測できた割合.今の例だと,ガンである人の中でガンであると正しく診断できた人の割合.

適合率と再現率は一般的にはトレードオフな関係になっており,モデルの予測値h_{\theta}(x) がある閾値が大きいときy=1と予測したとすると,閾値が小さければ(=疑わしい人は皆ガンと診断すると)再現率は上がり適合率は下がる.逆に大きければ(=確実にガンと思われる人だけをガンと診断すると)適合率が上がり再現率が下がる.

この適合率Pと再現率Rのバランスを定量化したものがF値で,

F=2\dfrac{PR}{P+R}

と表せる.複数のモデルがある場合F値が大きいものを選べば,偏りのあるデータにも対応できる.

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中