243

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

私は主にトレーニングデータと検証データのそれぞれ80%/ 20%を使用していますが、原則的な理由なしにこの部門を選択しました。機械学習の経験が豊富な人にアドバイスしてもらえますか?

4

7 に答える 7

264

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

合計100個のインスタンスがある場合、単一の分割で推定値に十分な分散が得られないため、交差検定でスタックしている可能性があります。100,000個のインスタンスがある場合、80:20分割と90:10分割のどちらを選択するかは実際には重要ではありません(実際、メソッドが特に計算量の多い場合は、使用するトレーニングデータを少なくすることを選択できます)。

(相互検証ではなく)適切な保持されたテストデータを実行するのに十分なデータがあると仮定すると、分散を処理するための有益な方法は次のとおりです。

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

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%をトレーニング用に予約する必要があります。

于 2012-11-28T19:30:31.237 に答える
56

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

トレーニング:60%

相互検証:20%

テスト:20%

于 2012-11-28T19:53:40.623 に答える
19

さて、もう1つ考えるべきです。

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

5,000の例でデータの分散の大部分を表すことができ、テストと開発でのこれらの5,000の例に基づいてモデルが適切に機能することが簡単にわかるため、99 / 0.5/0.5で十分かもしれません。

大丈夫だと聞いたからといって80/20を使用しないでください。テストセットの目的について考えてください。

于 2017-09-06T07:31:26.480 に答える
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です。

于 2017-02-25T20:27:24.763 に答える
1

それはすべて手元のデータに依存します。かなりの量のデータがある場合は、上記のように80/20が適切な選択です。ただし、50/50分割で交差検定を行わないと、さらに多くのことが役立ち、トレーニングデータに過剰適合するモデルを作成できなくなる可能性があります。

于 2017-06-10T20:59:50.737 に答える
1

Suppose you have less data, I suggest to try 70%, 80% and 90% and test which is giving better result. In case of 90% there are chances that for 10% test you get poor accuracy.

于 2018-11-12T08:53:28.743 に答える