logo

交差検証 📂機械学習

交差検証

モデル検証

データ分析から得られたモデルが適切なパフォーマンスを有しているかを確認する過程が必要だ。与えられたデータだけをうまく説明して、実際には全く力を発揮できない場合、分析をする意味がないからだ。このため、全体データをモデルを得るために使うデータセットと、そのモデルのパフォーマンスを評価するデータセットに分ける。

20190128_103954.png

モデルを得るとは、与えられたデータを利用して他のデータも説明してみるという意味だ。この文脈で、「与えられたデータ」をトレーニングデータtraining Dataと呼ぶ。マシンラーニングなどの分野で「学習」という言葉と同じ文脈である。そして、「他のデータ」をテストデータtest Dataと呼ぶ。厳密に言えば、テストデータは「実際のテスト」のために作られたわけではないが、モデルの立場から見れば新しいデータなので、パフォーマンスを確認するのに使えるものだ。

これまでが「モデルを検証する」というアイディアだ。分析が適切に行われたかを確認するために様々な検定があるように、そうして得られたモデルが実際に役立つかを確認することが重要だ。この視点から見た時、回帰係数が有意かどうか変数が多すぎるのではないか適合度検定を通過したかということは、検証の関心事ではない。

20190128_104359.png

トレーニングデータで得られたモデルがテストデータに対してもまともなパフォーマンスを示すなら、他のデータに対しても良いパフォーマンスを出せるだろうと考えることができる。私たちが大学入試の勉強をする過程がトレーニングなら、模擬試験がまさにテストだ。このような模擬試験を繰り返すことで、大学入試で適切なパフォーマンスを出せるかどうかを常に確認することになる。

しかし、ある生徒が大学入試を控え、9模試の数学領域だけを繰り返し勉強したとしよう。最初は15点だったとしても、同じ問題を繰り返し解き、答えを暗記できるレベルで勉強すれば当然100点を取ることができるだろう。しかし、この生徒が大学入試で成績が上がることを期待するのは難しい。この現象を過学習overfittingと呼ぶ。限られた問題にのみ最適化されているため、どんな問題が出るかわからない大学入試には対応できないのだ。

しかし、この生徒が再受験し、過去10年分の大学入試と6模試、9模試を繰り返し勉強したと考えてみよう。すべての試験で100点を取るのは難しいだろうが、大学入試の成績は確実に上がるだろう。「たくさんの」「努力」を「繰り返した」からに他ならない。これが私たちが知っている勉強の正体だ。

$k$-フォールド

20190128_114441.png 過学習を発見したり、回避するときに使える方法はクロスバリデーションcross Validationだ。データをちょうど二つに分けるだけではなく、様々な状況を作り出して最も柔軟にデータを学習したモデルを選択することだ。データを分ける時はランダムだから、たまたま本当に運が良くて、非常にパフォーマンスが良いモデルがあるかもしれない。その時、クロスバリデーションを行って、そのモデルだけが圧倒的にパフォーマンスが良いなら、過学習を疑うことができる。

20190128_114751.png データBは明らかにデータEをテストデータにした時、トレーニングデータとして使われたが、逆にデータBがテストデータとして使えない理由は全くない。テストデータを回してパフォーマンスを確認することができる。特に、分割する個数を$k$個として行うクロスバリデーションを**$k$-フォールドクロスバリデーション**と呼ぶ。

もし、分割する個数が$k=n$で、つまり、一度に一つのデータだけを除外してクロスバリデーションを行う場合は、ジャックナイフ法jackknifingとも呼ばれる。