
- Week6
- 学習アルゴリズムの評価 (Evaluating a Learning Algorithm)
- 仮説の検証 (Evaluating a Hypothesis)
- 目的関数の選定と訓練/検証/テストセット (Model Selection and Train/Validation/Test Sets)
- 偏りと分散 (Bias vs. Variance)
- 偏りか分散かを診断する (Diagnosing Bias vs. Variance)
- 正規化と偏り/分散 (Regularization and Bias/Variance)
- 学習曲線 (Learning Curves)
- 次に何をすべきか決定する (Deciding What to do Next Revisited)
- スパムメール分類器の構築 (Building a Spam Classifier)
- 歪度のあるデータ (Handling Skewed Data)
- 大規模データを使う (Using Large Data Sets)
- Quiz
[機械学習]
Week6
- 参考
学習アルゴリズムの評価 (Evaluating a Learning Algorithm)
仮説の検証 (Evaluating a Hypothesis)
- 仮説の検証のためにデータセットを以下のように分ける
- training set (トレーニングセット): 70%
- test set (テストセット): 30%
- その2つのデータセットを使い
- θを学習させトレーニングセットを使って \( J_{train}(\Theta) \) を最小化する
- \( J_{test}(\Theta) \) の誤差を計算する
テストセットの誤差(微分されたやつ)は
- \( \text{ Test Error } = \frac{ 1 }{ m_{test} } \sum_{i=1}^{m test} err(h_\theta(x^{(i)}_{test}), y^{(i)}_{test} ) \)
目的関数の選定と訓練/検証/テストセット (Model Selection and Train/Validation/Test Sets)
トレーニングセットに目的関数がうまくフィットしたからと言って、モデルがうまく構築できたとは言えない。なぜならそのままではオーバーフィッティングしている可能性があるからだ。
- そこで、目的関数を何次方程式にするか決める方法を紹介する。
- training set (トレーニングセット): 60%
- cross validation set (クロスバリデーションセット): 20%
- test set (テストセット): 20%
これを使って以下の要領で学習を進める
- 各次元の関数にトレーニングセットを使用してθを最適化する
- クロスバリデーションセットを使って最も誤差が少ない次数の関数を見つける
- テストセットを使用して \( J_{test} (\Theta^{(d)} ) \) の誤差を見積もる
偏りと分散 (Bias vs. Variance)
偏りか分散かを診断する (Diagnosing Bias vs. Variance)
作った目的関数が偏り気味か分散気味か判別する必要がある
- High varianceの状態が過学習(overfitting)で、High biasの状態が未学習(underfitting)
- これの黄金比(笑)を求める必要がある
- 傾向
- トレーニングセットの誤差
- 目的関数の次数を上げるほど下がる傾向にあるだろう
- クロスバリデーションの誤差
- ある地点までは目的関数の次数を上げるほど下がる傾向にある
- ある地点からは目的関数の次数を上げるほど上がる傾向にある
- これは凸曲線になるということだ
- トレーニングセットの誤差
正規化と偏り/分散 (Regularization and Bias/Variance)
- 傾向
- 大きめのλ → 偏りが大きい(underfit)
- 中くらいのλ → 正しい目的関数
- 小さめのλ → 分散が大きい(overfit)
以下の要領で学習を進める
- 使えそうな正規化パラメーターλ を複数用意する
- 複数の目的関数を作成する
- θ を学習させるために全てのパラメーターλを通して学習させる
- 学習済みのθを使って正規化なしに \( J_{CV}(\Theta) \) 上でクロスバリデーションの誤差を計算する
- クロスバリデーションの中で一番誤差が少ないベストな組み合わせを選択する
- 最良のθとパラメーターλを\( J_{test}(\Theta) \)を使って学習が完了する
学習曲線 (Learning Curves)
- \( J_{test}(\Theta) は J_{CV}(\Theta) \) と同じってことか
- 高い偏りが予想される
- トレーニングセットのサイズが小さいと \( J_{train}(\Theta) は低くなり、J_{CV}(\Theta) \) は高くなる
- トレーニングセットのサイズが大きいと \( J_{train}(\Theta) と J_{CV}(\Theta) \) は高くなる
学習曲線が強い偏り傾向に見舞われる場合、トレーニングデータを増やすことは助けにならない
- 高い分散が予想される
- トレーニングセットのサイズが小さいと \( J_{train}(\Theta) は低くなり、J_{CV}(\Theta) \) は高くなる
- トレーニングセットのサイズが大きいと \( J_{train}(\Theta) は増加し、 J_{CV}(\Theta) \) は減少し続ける
学習曲線が強い分散傾向に見舞われる場合、トレーニングデータを増やすことが役に立つだろう
次に何をすべきか決定する (Deciding What to do Next Revisited)
たぶん
- トレーニングセットはOK、テストセットはダメ
- 分散傾向
- トレーニングセットはNG、テストセットはOK
- 偏り傾向
- トレーニングセットはNG、テストセットもNG
- そもそも目的関数がちゃんと出来ていないので特徴値を増やしたりする必要あり
よって、そこから以下のような施策
- もっと多くのトレーニングセットを用意する
- 分散傾向を修正する
- 特徴値を少なめにとる
- 分散傾向を修正する
- 特徴値を多くする
- 偏り傾向を修正する
- 目的関数の次数を上げる
- 偏り傾向を修正する
- 正規化パラメーターλを少なくする
- 高い偏り傾向を修正する
- 正規化パラメーターλを多くする
- 分散傾向を修正する
スパムメール分類器の構築 (Building a Spam Classifier)
歪度のあるデータ (Handling Skewed Data)
- Precision / Recall
- 判別が正しくできたかどうかチェックのために2つの分類、4つの要素を使う
- Precision / Recall
- true positive / false positive / false negative / true negative
1 (実際の値) | 0 (実際の値) | |
---|---|---|
1 (予測値) | True positive | False positive |
0 (予測値) | False negative | True negative |
- Accuracy = ( True positive + True negative ) / ( total examples )
- Precision(P) = True positive / True positive + False positive
- Recall(R) = True positive / True positive + False negative
- F_1 score = ( 2 * P * R ) / ( P + R )
- PrecisionとRecallのトレードオフ
- y = 1, となる条件を厳しくしたい場合
- 高いPrecision, 低いRecall
- y = 1, となる条件を緩くしたい場合
- 低いPrecision, 高いRecall
- y = 1, となる条件を厳しくしたい場合
- F_1 Score (F score)
- Precision / Recall の値として何が最適か自動で出したいときの指標
\( F_1 \text{ Score: } 2 \frac{PR}{P+R} \)
大規模データを使う (Using Large Data Sets)
- BankoとBrillの検証論文の内容について
- 機械学習のアルゴリズムの精度は、アルゴリズムの方式ではなくいかに大量のトレーニングデータを与えることができるかどうかということにかかっている
ここで、大量のトレーニングセットが機械学習の精度を上げることを保証する前提を確認すると
- 人間の専門家であってもデータセットXに対して予測Yが立てられるということ
- 大量のトレーニングセットでアルゴリズムを試せること
Quiz
- PrecisionとRecallの計算方法を覚えておく
- 大量のトレーニングセットが機械学習の精度を上げることを保証する前提を選ぶ
- predict 1 if \( h_\theta(x) \text{ >= threshold } \) predict 0 if \( h_\theta(x) \text{ < threshold } \)
- 下げると
- 上げると