作ったモデルが学習データで正解率99%やった。これで完成でええの?
【疑問】学習データで正解率99%やのに新しいデータで70%。ホールドアウト検証とk-分割交差検証で何が分かるん【G検定】
前提のおさらい。線形回帰などの教師あり学習では、手元のデータで係数を決める。でもほんまに知りたいのは、まだ見てない新しいデータでどれくらい当たるか
>>1
学習に使ったデータで測った成績は、あてにならん。答えを覚えた問題でテストしてるのと同じ
新しいデータでの当たり具合を汎化性能という。学習データには合ってるのに新しいデータで外れるのが過学習
学習データで99%、新しいデータで70%なら、典型的な過学習
>>3
汎化性能を見積もる一番簡単な方法がホールドアウト検証。たとえば1000件を学習用800件とテスト用200件に分けて、テスト用はモデル作りに一切使わずに最後に1回だけ測る
>>4
200件だけやと、どの200件になったかで成績が変わりそう
>>5
変わる。データが少ないときほど、分け方の運が大きい
そこでk-分割交差検証。データを 個に分けて、1個をテストに、残りを学習に使うのを 回くり返して平均する
で各回の正解率が 0.82, 0.85, 0.80, 0.84, 0.79 なら、平均の0.82を汎化性能の見積もりにする
>>6
全部のデータが1回ずつテストに使われるのがええところやな
>>6
そのかわり、学習を 回やり直すから計算は 倍。ディープラーニングみたいに1回の学習が重いモデルでは、データも多いことやし、ホールドアウトで済ませることが多い
ハイパーパラメータを選ぶときは、テスト用を使ったらあかん
テストの成績を見て選んだら、テスト用にも合わせこんだことになる。学習用・検証用・テスト用の3つに分けて、選ぶのは検証用でやる
>>9
時系列のデータはどうするん?ランダムに分けたら、未来のデータで学習して過去を当てることになるやん
>>10
そのとおりで、時系列では時間の順番を守って、古いほうで学習して新しいほうでテストする。ランダムに混ぜると成績がよく見えすぎる
管理人のひとこと
- 学習データでの成績はあてにならない。新しいデータでの当たり具合が汎化性能で、学習データだけに合うのが過学習(例:99%と70%)。
- ホールドアウト検証は、たとえば800件で学習して残りの200件で1回だけ測る。データが少ないと分け方の運が大きい。
- k-分割交差検証は 回テスト用を入れ替えて平均する(0.82, 0.85, 0.80, 0.84, 0.79 なら0.82)。計算は 倍。
- ハイパーパラメータは検証用で選び、テスト用は最後に使う。時系列は時間の順番を守って分ける。