2017-11-01 8 views
0

私は約189000行の大きなデータセットと、合計16個のカラムを持っています。私はそれを80%のトレーニングと20%のテストに分けたいと思っています。データセット自体の行は、最初の行の部分がニュースに関連し、2番目がスポーツに、3番目が宗教に、最後の行が一般的なグループに分かれています。私は80:20に直接分割することはできません。なぜなら、データセットの下部にあるクラスの大半がトレーニングでは見逃されるからです。また、そのようなデータセットから検証セットを選択するにはどうすればよいですか?特定のインデックスを使用してデータセットをテスト、検証、トレーニングに分類する方法は?

+4

のベストプラクティスは、ランダムに分割し、オーバーフィッティング一切を保証するために、いくつかの異なる分割をしようとしないことです終わらせる。 Neural Network Toolboxを使用している場合は、['dividerand'](https://www.mathworks.com/help/nnet/ref/dividerand.html)を使用するか、[' randperm'](https:そうでなければ//www.mathworks.com/help/matlab/ref/randperm.html)。 – buzjwa

+1

機械学習ツールボックスをお持ちの場合は、 'holdout'オプションを指定して 'cvpartition'をご覧ください:https://ch.mathworks.com/help/stats/cvpartition.html –

答えて

2

あなたの質問をよく理解していれば、トレーニングデータセットを選択している間に、さまざまな行タイプの割合を維持したいと考えています。私はあなたが行の種類ごとに行の80%を選択することをお勧めします。

% rowType: 1: news, 2: sport, 3: religion, 4: general 
% dataset: original dataset variable 
trainingSelected = false(size(dataset,1),1); 
p = 0.8; 
for i=1:4 
    rTypeIdx = find(rowType==i); 
    n = numel(rTypeIdx) 

    sel = randperm(n, round(n*p)); 
    trainingSelected(rTypeIdx(sel)) = true; 
end 

あなたは、厳密な比率を維持したくない場合は、あなただけの直接randpermを使用することができます。

p = 0.8 
trainingSelected = randperm(size(dataset,1), round(size(dataset,1)*p)); 
関連する問題