機械学習、ディープラーニングでの学習データとテストデータの分割手法について
機械学習、ディープラーニングではモデルの精度を高めることが非常に大切です。
モデルの精度を高めるためには手持ちのデータを用いて学習していきますが、その際に学習用データとテストデータで分ける必要があります。
もし、手持ちのデータを全て学習用データとして使用した場合、過度に適合したモデルが出来上がってしまい、逆に精度が低くなってしまうからです。これは過学習と呼ばれています。
過学習を防止するため、手持ちのデータを全て学習用のデータとして使用するのではなく、学習用データとテストデータに分割し検証していくことが大切です。
学習用データとテストデータの分割の方法にはいくつかの手法があるので、代表的な手法について解説します。
Hold-out(ホールドアウト法)
データ全体を学習用データとテストデータに分割し、モデルの精度を確かめる手法です。例えばデータ全体が100個ある場合、6対4の割合で分割し、学習用データを60個、テストデータを40個に分割します。
Cross Validation(クロスバリデーション法)
Cross Validation(クロスバリデーション法)は別名、K-分割交差検証と呼ばれます。
K-分割交差検証では、データ全体をK個に分割します。そして、そのうちの1つをテストデータとし、残る K-1 個を訓練用データに分解します。
その後、テストデータと学習用データを入れ替えて繰り返し、全てのケースがテスト事例となるよう検証を繰り返します。
すなわち、K 個に分割されたデータはK 回の検証が行われることになります。
このようにして得られた結果を平均してモデルの精度を確かめます。
以下に100個のデータに対して、4分割した場合のCross Validationの例を示します。(4-fold cross validation)
Leave One Out
Cross Validation(クロスバリデーション法)に似ていますが、Leave One Out(リーブワンアウト法)とは、データ全体のうち1つだけをテストデータとする方法です。
その後、テストデータと学習用データを入れ替えて繰り返し、全てのケースがテスト事例となるよう検証を繰り返します。
また、Leave One Outとは一つ抜き法,ジャックナイフ法とも呼ばれています。
このようにして得られた結果を平均してモデルの精度を確かめます。
以下に100個のデータに対して、Leave One Out(リーブワンアウト法)を用いた例を示します。
使用する手法の例
このように学習用データとテストデータの分割の方法にはいくつかの種類がありますが、最適な使用方法はどんなときなのでしょうか?
Leave One Outは1つずつ分解するので精度は高くなりやすいですが時間が非常にかかります。それとは逆にHold-out(ホールドアウト法)の場合はデータにばらつきがある場合は高精度が出しにくいですが、時間は短時間で済みます。
このように手持ちのデータサンプル数によって使い分ける必要性があります。
データサンプル数が10個以下の場合
手持ちのデータが10個以下の場合はサンプル数が少なすぎるため、どの手法を用いても効果は期待出来ません。
本当に機械学習、ディープラーニングを行う必要があるのか見直す必要があります。
データサンプル数が100個以下の場合
Leave One Out(リーブワンアウト法)が有効ですが、サンプル数がまだ少ないため、モデルの精度はあまりよくなりません。
データサンプル数が1,000個以下の場合
Cross Validation(クロスバリデーション法)で10分割(10-fold cross validation)が丁度いいです。Leave One Out(リーブワンアウト法)も件数によっては有効ですが、その分時間はかかります。
データサンプル数が1,0000個以下の場合
Cross Validation(クロスバリデーション法)で10分割以内か、Hold-out(ホールドアウト法)を使用して検証する必要があります。また、この量の学習サンプル数となると、マシン性能のスペックや処理の非常に重要となってきます。
データサンプル数が1,00000個以下の場合
この量になると、Hold-out(ホールドアウト法)以外は無理です。またマシン性能スペックやアルゴリズムが非常に大事となってきます。
データサンプル数がこれ以上の場合は、Hold-out(ホールドアウト法)でも難しくなり、またマシン性能のスペックも超高性能が必要となります。研究施設等での超最先端な技術を持ち合わせてなければ出来ないレベルとなります。