web-dev-qa-db-ja.com

Matlabのデータセットからランダムサンプルを選択する方法

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

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

23
robguinness

このタスクには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, :); 
33
H.Muster

行数と組み合わせて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
6
Justin

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

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

4
robguinness

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

統計ツールボックスからのrandsampleを含むコードもここにあります。ただのロジックであり、それに応じて調整する必要があるかもしれません。

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

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

randsample(1:N,n)

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

1
bonCodigo