データセットをトレーニングセットと検証セットに分割するための経験則はありますか?


194

データをトレーニングセットと検証セットに最適に分割するための経験則はありますか?50/50に均等に分割することをお勧めしますか?または、検証データに比べてトレーニングデータが多い(またはその逆)ことの明らかな利点はありますか?または、この選択はアプリケーションにかなり依存していますか?

私は主にそれぞれ80%/ 20%のトレーニングと検証データを使用してきましたが、私は何の理由もなくこの部門を選びました。機械学習の経験が豊富な誰かが私に助言できますか?


利用可能なデータが多すぎない場合は、en.wikipedia.org
wiki / Resampling_(statistics)#Jackknife

回答:


220

2つの競合する問題があります。トレーニングデータが少ないと、パラメーター推定の分散が大きくなります。テストデータが少ないと、パフォーマンス統計の分散が大きくなります。大まかに言えば、どちらの分散も高くなりすぎないようにデータを分割することに注意する必要があります。これは、割合ではなく、各カテゴリのインスタンスの絶対数に関係しています。

合計100のインスタンスがある場合、単一の分割では見積もりに十分な分散が提供されないため、おそらく相互検証で立ち往生しています。100,000個のインスタンスがある場合、80:20分割と90:10分割のどちらを選択しても問題はありません(実際に、メソッドが特に計算負荷が高い場合は、使用するトレーニングデータを少なくすることもできます)。

(交差検証ではなく)適切なホールドアウトテストデータを実行するのに十分なデータがあると仮定すると、以下は分散のハンドルを取得するための有益な方法です。

  1. データをトレーニングとテストに分割します(80/20は確かに良い出発点です)
  2. トレーニングを分割するデータをトレーニングと検証にます(ここでも、80/20は公平な分割です)。
  3. トレーニングデータのランダム選択をサブサンプリングし、これを使用して分類子をトレーニングし、検証セットのパフォーマンスを記録します
  4. 異なる量のトレーニングデータを使用して一連の実行を試します。たとえば、ランダムに20%のサンプルを10回サンプリングし、検証データのパフォーマンスを観察してから、40%、60%、80%で同じことを行います。より多くのデータでパフォーマンスが向上するだけでなく、さまざまなランダムサンプル全体の分散も低くなるはずです。
  5. テストデータのサイズによる差異のハンドルを取得するには、同じ手順を逆に実行します。すべてのトレーニングデータでトレーニングし、検証データの一定の割合をランダムに数回サンプリングして、パフォーマンスを観察します。検証データの小さなサンプルの平均パフォーマンスは、すべての検証データのパフォーマンスとほぼ同じであることがわかりますが、テストサンプルの数が少ないほど、分散ははるかに高くなります。

おかげで、これもとても役に立ちます!やってみます。参考までに、トレーニングデータのインスタンスは約6000あります。私はSVMを使用しているため、パフォーマンスが多少問題になります。
robguinness 2012年

1
FWIW、パフォーマンスの変動は、すべてのインスタンスを1回分類し、それらが正しいかどうかの決定をスコアリングし、次にテストインスタンスの代わりにこれらの決定をサンプリングして、異なるテストセットサイズを使用する効果を生成することによって計算できます
Ben Allison

また、テストに10%と20%を使用した場合の違いがそれほど大きくないようにするには、6000インスタンスで十分です(これについては、私が説明する方法で確認できます)
Ben Allison

1
また会ったね。ポイント5で少し混乱しています。「その後、検証データのパーセンテージを何度もランダムにサンプリングする」と述べました。代わりにテストデータを表示するつもりでしたか?私が正しく理解している場合は、まずデータをトレーニングデータセットとテストデータセットに分割し、次にトレーニングデータセットの一部を検証データセットに分割します。したがって、ステップ5でテストデータの分散を測定している場合、テストデータからランダムに母集団をサンプリングする必要はありませんか?それとも何か不足していますか?
robguinness 2012年

2
重要なのは、パラメーターをいじって、変化の影響を観察している間、検証データを使用してテストする必要があるということです。テストデータを検討し始め、その中で最高のスコアが得られるものに基づいて戦略を選択すると、メソッドのパフォーマンスの感覚が膨らみます。すべてのパラメータが設定され、意思決定が行われた場合、その後、あなたの試験データに実行されます。これにより、実際に新しい、観測されていないデータでどのようなパフォーマンスが得られるかを知ることができます(これは、おそらくあなたが興味を持っているものです)
Ben Allison

54

80/20がよく発生する比率であり、しばしばパレート原理と呼ばれていることを知って驚かれることでしょう。その比率を使用する場合、それは通常安全な賭けです。

ただし、使用するトレーニング/検証方法によっては、比率が変わる場合があります。たとえば、10分割の相互検証を使用すると、各分割で10%の検証セットが作成されます。

いくつかの研究が行われてきました トレーニングセットと検証セットの適切な比率については、

検証セット用に予約されているパターンの割合は、調整可能な自由パラメーターの数の平方根に反比例する必要があります。

彼らの結論では、彼らは式を指定します:

検証セット(v)とトレーニングセット(t)のサイズ比、v / t、ln(N / h-max)のようなスケール。ここで、Nは認識機能のファミリの数であり、h-maxはそれらのファミリの最大の複雑さです。

複雑さとは、次のようなものです。

レコグナイザの各ファミリは、その複雑さによって特徴付けられます。複雑さは、VCディメンション、説明の長さ、調整可能なパラメータの数、またはその他の複雑さの尺度に関連する場合と関連しない場合があります。

最初の経験則(つまり、検証セットは無料の調整可能なパラメーターの数の平方根に反比例する必要があります)を採用すると、32の調整可能なパラメーターがある場合、32の平方根は〜5.65で、端数は1 / 5.65または0.177(v / t)。およそ17.7%を検証用に、82.3%をトレーニング用に予約する必要があります。


2
自分自身のようにロードするのが難しいかもしれない人のための(理由はわからない)論文は次のとおりです。「検証セットトレーニングセット比率サイズのスケーリング則」 )。
森林生態学者2016

2
経験則は理にかなっていますか?2つの調整可能なパラメーターがある場合、比率は0.77です。つまり、検証に77%を使用します。問題は、自由なパラメータ定義です。線形SVMの場合、1つのパラメーターであるエラー項にペナルティパラメーターCを設定できますが、SVMの場合、複雑さは次元+1が高くなります。
リードリチャーズ

4
ニューラルネットワークがある場合、テストサイズは1にする必要があります。
YellowPillow 2018年

51

昨年、私は教授:Andrew Ngのオンライン機械学習コースを受講しました。彼の推薦は:

トレーニング:60%

相互検証:20%

テスト:20%


20
Coursera.org/learn/deep-neural-network/lecture/cxG1s/…99.5:0.25:0.25 in the modern big data era, where, for example, you might have a million examples in total, then the trend is that your dev (cross validation) and test sets have been becoming a much smaller percentage of the total.になる可能性があると彼は示唆しています。
Nobu

9

さて、あなたはもう一つ考えるべきです。

1,000,000の例のような非常に大きなデータセットがある場合、モデルが正常に機能することを伝えるために10%= 100,000の例は必要ないため、80/10/10の分割は不要な場合があります。

多分99 / 0.5 / 0.5で十分です。5,000の例はデータの分散のほとんどを表すことができ、テストと開発におけるこの5,000の例に基づいてモデルが適切に機能することは簡単にわかるでしょう。


検証セットの0.5%で十分かもしれませんが、十分かどうか分からないので、あなたは大きな不必要なリスクを負っていると私は主張します。小さすぎる検証セットを使用している場合、トレーニングは簡単に失敗する可能性がありますが、大きな検証セットを使用して失敗することはほとんど不可能です。
ビョルンLindqvist

2

データが少ないとしたら、70%、80%、90%を試して、より良い結果が得られるかテストすることをお勧めします。90%の場合、10%のテストで精度が低下する可能性があります。


1

おそらく63.2%/ 36.8%が妥当な選択です。その理由は、合計サンプルサイズがnで、ランダムなサンプルを取り替えて(統計ブートストラップのように再サンプルとして)最初のnからn個のケースを抽出したい場合、個々のケースがここで説明するように、nが小さすぎない場合、再標本化は約0.632になります。ます。https //stats.stackexchange.com/a/88993/16263

n = 250のサンプルの場合、4桁に再サンプルするために個別のケースが選択される確率は0.6329です。n = 20000のサンプルの場合、確率は0.6321です。


1

それはすべて手元のデータに依存します。かなりの量のデータがある場合は、前述のように80/20が適切な選択です。ただし、50/50分割での相互検証を行わない場合、トレーニングデータが過剰に適合しているモデルを作成できなくなる可能性が高くなります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.