参考サイト:
- 一流の「ものさし」職人になろう Cross Validation (交差検証)を深堀り
- 機械学習、ディープラーニングでの学習データとテストデータの分割手法について
- StratifiedKFold v.s KFold v.s StratifiedShuffleSplit
そもそも・・・
- 交差検証:モデルの汎化性能を評価
- Grid Search, Randomized Search : パラメータチューニング
パラメータチューニングと交差検証
訓練データとテストデータに分割し、訓練データで交差検証を行い、テストデータで汎化性能を見ようとすると、テストデータが一種類しか無いので、結果が偏る可能性がある。
そこで、交差検証をネストさせることにより、訓練データとテストデータを何度も分割させることで、テストデータを複数種類用意し、汎化性能を見る。ただし、計算コストが跳ね上がるので注意!
交差検証のネストについては、『sklearnのgrid_searchでパラメータチューニングしつつcross_val_screで交差検証を行うコード』に記載
交差検証種類
- KFold :
データセットをKグループ(フォールド)に等しく分割。分類データに偏りがあると、各グループのクラスに偏り(グループ1にはクラスAがあるが、グループ1にはないなど)が発生し、学習がうまくいかない場合がある。KFoldの回数は、どれが適切かはハッキリ言えないらしく、TitanicやHouse Pricesでは、5回が多かった感じ。いくつかのサイトでは、8回〜10回位を勧めているのが見られた。 - Stratified KFold :
例えばクラス分類がA-90%, B-10%などのように不均等の際に、どのグループもA-90%, B-10%の比率になるようにクラス比率のバランスを取りながらデータの分割を行う。 - Repeated KFold :
KFoldをしてされた回数分リピートする分割法。KFlodのサンプルの分割法は1リピートにつきランダムで変わるので、毎回のリピートでサンプルが同じようなグループになることはない。 - 1つ抜き交差検証(leave-one-out) :
データ全体のうち1つだけをテストデータとする方法。その後、テストデータと訓練データを入れ替えて繰り返し、全てのケースがテスト事例となるように検証を繰り返す。(ジャックナイフ法とも呼ばれる)。全てのデータを一つ一つテストに使うので、データが大きいと処理に時間がかかる。
参考サイトより
パラメータチューニング時のPipelineの利用
パラメータチューニング時にデータリークを防ぐため、データ分割毎にstandardizationを行うようにPipelineを利用する例。(ElasticNetによる回帰)
0コメント