学習データとテストデータの分け方概論
酒を飲む前に勉強します
引き続きUdemyの機械学習講座にて勉強
学習環境は、家にデスクトップPCがあるものの、誘惑が多いのでノートPC
Mac miniが発売されたら購入して家の環境を整理したい
学習データとテストデータの準備
- 学習データ=テストデータ、というのはよくない
- 元のデータに適用しすぎ、他の新たなデータに適用できない識別器ができてしまうため
- 通常は手持ちのデータに対し、50%を学習データ、50%をテストデータというように分けて使用する
- 学習データ≠テストデータ、とするのがよい
- Hold-outと言われる
Cross varidation
- Cross varidation、K-fold CV、交差検定、交差検証、交差確認とも言われる
- 手持ちのデータをn等分し、学習データとテストデータを入れ替えながら学習させる
- 例:100個のデータ、4等分の場合、1-75番目までを学習データ、76-100番目までをテストデータとする 次に1-50番目と76-100番目を学習データ、51-75番目をテストデータとする、ということを繰り返す方法
Leave one out
- N-fold CV、LOO、LOOCV、1つ抜き法、ジャックナイフ法とも言われる
- 手持ちのデータが少ない場合に使用される
- 手持ちのデータから1つのデータのみをテストデータとし、残りすべてを学習データとする
- 例:100個のデータの場合、1-99番目までを学習データ、100番目をテストデータとする 次に1-98番目と100番目を学習データ、99番目をテストデータする、ということを繰り返す方法
Stratified(層化)
- 学習データとテストデータを半々に分ける場合、ランダムに分けた場合でも学習データとテストデータのクラス(教師データ)が偏る可能性がある
- 学習データとテストデータの内容を、クラス(教師データ)の比率を保ったまま分ける、という方法
学習データ、テストデータ、検証データ
- 実際に機械学習を行う場合、手持ちデータを学習データ、テストデータに分けるが、学習データを更に学習データと検証データに分け、その中で精度が出るよう設定する
- テストデータはその後の本番として、本当に精度が出るかを試すために使用する
- 学習データとテストデータに分け、そのテストデータに合うようにチューニングを繰り返すと、そのテストデータに特化した識別器になってしまうため
どのくらいデータがあればよいか
- 学習サンプル数 < 10、本当に機械学習が必要かどうか、考え直す
- 学習サンプル数 < 100、機械学習ができないことはないが増やす努力が必要、性能は悪い、LOOCVが可能
- 学習サンプル数 < 1,000、まともな性能、10-fold CVで十分
- 学習サンプル数 < 10,000、良い性能が期待できる、K-fold CV(K < 10)を使用、計算リソースが重要となる
- 学習サンプル数 < 100,000、実応用、Hold-out以外無理、計算にかなり工夫が必要
- それ以上は最先端、実応用で頑張るしかない
学習・テストの分割方法はどれがよいか
- コンテスト、データセットに規格、基準が付属している場合はそれに従う
- 学習サンプル数が少ない場合はLOO
- 学習サンプル数がそこそこ、数百~数千ある場合は10-fold CV
- 学習サンプル数が膨大な場合、Hold-outしかない
- Stratifiedは常に重要
学習データ=テストデータの場合
- コードを書きながら実際の動きを学ぶ
- ランダムな2クラスの学習サンプルを作成、学習データ=テストデータで学習させた後、新たな学習サンプルを作成、精度を確認する
- 新たな学習データでは精度が約50%、2クラス問題では最低の精度になる