Как выбрать случайные выборки из набора данных в Matlab [дубликат]

Возможные Дубликаты:
как случайным образом выбрать k точек из N точек в MATLAB?

предположим, у меня есть набор данных, который включает 10 000 строк данных. Каков наилучший способ создания подмножества, включающего 1000 случайно выбранных строк?

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

если у вас есть Statistics toolbox R2012+, вы можете использовать datasample.

subset = datasample(data,1000)

subset будет случайным образом выбранным подмножеством данных, состоящим из 1000 выборок.

к образцу без замены, используйте:

subset = datasample(data,1000,'Replace',false)

если у вас есть более старая версия toolbox, вы можете использовать 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 из Statistics toolbox. Просто логика, и вам, возможно, придется скорректировать ее соответствующим образом.

матрица m из N строк вытащите случайную выборку из n строк из m

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

randsample(1:N,n)

выше приводит к последовательности из n случайных целых чисел от 1 до N.