10,000行のデータを含むデータセットがあるとします。ランダムに選択された1,000行を含むサブセットを作成する最良の方法は何ですか?
このタスクにはrandpermを使用できます。
交換なしのサンプリング:
nRows = 10000; % number of rows
nSample = 1000; % number of samples
rndIDX = randperm(nRows);
newSample = data(rndIDX(1:nSample), :);
交換によるサンプリング:
nRows = 10000; % number of rows
nSample = 1000; % number of samples
rndIDX = randi(nRows, nSample, 1);
newSample = data(rndIDX, :);
行数と組み合わせてrandperm
を使用します。 x
が行列の場合:
nrows = size(x,1);
nrand = 1000; % Choose 1000 rows
assert(nrand<=nrows, 'You cannot choose more rows than exist in the matrix');
Rand_rows = randperm(nrows, nrand);
xx = x(Rand_rows,:); % Select the random rows from x
統計ツールボックスR2012 +をお持ちの場合は、 datasample を使用できます。
subset = datasample(data,1000)
subset
は、ランダムに選択された1000個のサンプルで構成されるデータのサブセットになります。
交換せずにサンプリングするには、以下を使用します。
subset = datasample(data,1000,'Replace',false)
古いバージョンのツールボックスを使用している場合は、 randsample を使用できます。
rndIdx = randsample(size(data,1),1000,true); % with replacement
subset = samples(rndIdx(1:1000), :);
rndIdx = randsample(size(data,1),1000,false); % without replacement
subset = samples(rndIdx(1:1000), :);
しかし、randsampleを使用することは、H.Musterの回答とほぼ同じです(ツールボックスを必要としないので、私はこれを最高のものとして受け入れました)。
注:置換ありのサンプリングと置換なしのサンプリングの違いの詳細については、 このページ を参照してください。
これまでにコードを書いたかどうかはわかりません。次の mathworks リンクは、ランダムサンプリングの例を示しています。アイデアのためにそれを見てください。
統計ツールボックスからのrandsampleを含むコードもここにあります。ただのロジックであり、それに応じて調整する必要があるかもしれません。
n行の行列mは、mからn行のランダムなサンプルを引き出します
Sample = m(randsample(1:N,n),:)
randsample(1:N,n)
上記の結果は、1からNまでのn個のランダムな整数のシーケンスになります。