I have a dataset (where each data is a vector of attributes with their corresponding class label). I want to split the dataset to a training set and testing set. Is there anyway to do this automatically ?
1 に答える
モデリングデータセットをトレーニング、検証、およびテストセットに分割する一般的な方法は、ランダムサンプルを使用することです。つまり、0から1までの乱数を割り当てます。40/ 30/30の分割が必要な場合は、値が0から0.4の間、validatinoでは0.4から0.7、テストでは0.7から1.0の行がトレーニング中です。 。40/30/30スピットには魔法のようなものは何もありません。これは、SAS Enterprise Minerのデフォルトです(実際、私は頻繁に60/30/10に変更します)。
これにはいくつかの調整と可能な改善があります。地理などのモデリングに重要な機能があることがわかっている場合は、層化サンプルを実行できます。このためには、データを列で並べ替えてから、基本的に「n番目ごと」のレコードサンプルを実行します。これは40%の分割ではもう少し複雑なので、「本質的に」と言います。これを処理するには、一度に10個のレコードを取得し、トレーニングセットに4個、検証セットに3個、テストセットに3個を選択します。10からどの特定のものを選択するかは重要ではありません。
より大きな問題は、階層データがあり、モデリングに使用される事実上すべてのデータが階層である場合です。たとえば、顧客の国勢調査区を説明する多数の列を持つ顧客データがあるとします。これらの変数が予測因子として重要である場合は、顧客レベルではなく国勢調査区レベルでのサンプリングを検討することをお勧めします。つまり、国勢調査区を3つのグループに(ランダムに)分割するため、顧客の40%がトレーニングセットに、30%が検証セットに、30%がテストセットに移動します。
データを確実に分割し、レコードが複数のグループに分類されないようにする必要があります。トレーニング、検証、テストセットが何かわからない場合は、データマイニングに関する本を入手することを強くお勧めします(「マーケティング、販売、カスタマーサポートのためのデータマイニングテクニック、第3版」など)。 ://www.amazon.com/Data-Mining-Techniques-Relationship-Management/dp/0470650931/ref=pd_sim_b_5)。