24

重複の可能性:
MATLAB で N 個の点から k 個の点をランダムに選択するにはどうすればよいですか?

10,000 行のデータを含むデータセットがあるとします。ランダムに選択された 1,000 行を含むサブセットを作成する最善の方法は何ですか?

4

4 に答える 4

34

このタスクには 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, :); 
于 2012-11-28T11:17:43.927 に答える
6

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
于 2012-11-28T11:21:21.160 に答える
3

統計ツールボックス R2012+ がある場合は、datasampleを使用できます。

subset = datasample(data,1000)

subset1000 サンプルからなるランダムに選択されたデータのサブセットになります。

置換なしでサンプリングするには、次を使用します。

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 の回答とほぼ同じです (ツールボックスを必要としないため、私はこれを最高として受け入れました)。

注: 置換ありのサンプリングと置換なしのサンプリングの違いの詳細については、このページを参照してください。

于 2012-11-28T11:21:10.663 に答える
1

これまでにコードを書いたかどうかはわかりません。次のmathworksリンクは、ランダム サンプリングの例を示しています。アイデアのためにそれを見てください。

統計ツールボックスの randsample を使用したコードもここにあります。単なるロジックであり、それに応じて調整する必要がある場合があります。

N 行の行列 m は、m から n 行のランダム サンプルを引き出します。

Sample = m(randsample(1:N,n),:)

randsample(1:N,n)

上記の結果は、1 から N までの n 個のランダムな整数のシーケンスになります。

于 2012-11-28T11:28:17.060 に答える