Cómo seleccionar muestras aleatorias de un conjunto de datos en Matlab [duplicar]


Posible Duplicado:
¿Cómo selecciono aleatoriamente k puntos de N puntos en MATLAB?

Digamos que tengo un conjunto de datos que incluye 10.000 filas de datos. ¿Cuál es la mejor manera de crear un subconjunto que incluya 1.000 filas elegidas al azar?

Author: Community, 2012-11-28

4 answers

Puede usar randperm para esta tarea:

Muestreo sin sustitución:

nRows = 10000; % number of rows
nSample = 1000; % number of samples

rndIDX = randperm(nRows); 

newSample = data(rndIDX(1:nSample), :); 

Muestreo con sustitución:

nRows = 10000; % number of rows
nSample = 1000; % number of samples

rndIDX = randi(nRows, nSample, 1); 

newSample = data(rndIDX, :); 
 33
Author: H.Muster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-28 13:35:42

Utilice randperm en combinación con el número de filas. Si x es su matriz:

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
Author: Justin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-28 11:21:21

Si tiene el statistics toolbox R2012+, puede usar datasample.

subset = datasample(data,1000)

subset será un subconjunto seleccionado aleatoriamente de datos que consta de 1000 muestras.

Para muestrear sin reemplazo, use:

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

Si tiene una versión anterior de la caja de herramientas, puede usar 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), :);

Pero usar randsample es más o menos lo mismo que la respuesta de H. Muster (que he aceptado como la mejor porque no requiere ninguna caja de herramientas).

Nota: Para más información sobre el diferencia entre muestreo con sustitución y muestreo sin sustitución sustitución, véase esta página.

 4
Author: robguinness,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-28 13:52:19

No estoy seguro de si has escrito algún código hasta ahora. El siguiente enlace mathworks muestra ejemplos de muestreo aleatorio. Échale un vistazo para encontrar ideas.

También un código aquí con randsample de statistics toolbox. Solo una lógica y es posible que tenga que ajustarlo en consecuencia.

Matriz m de N filas extraer una muestra aleatoria de n filas de m

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

randsample(1:N,n)

Los resultados anteriores en una secuencia de n enteros aleatorios de 1 a N.

 1
Author: bonCodigo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-28 11:28:17