347

勉強のこと、酒のことを書いていく

学習データとテストデータの分け方概論

酒を飲む前に勉強します

引き続き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クラス問題では最低の精度になる