10,000 行のデータを含むデータセットがあるとします。ランダムに選択された 1,000 行を含むサブセットを作成する最善の方法は何ですか?
4 に答える
このタスクには 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 個のランダムな整数のシーケンスになります。