tag - Cómo seleccionar muestras aleatorias de un conjunto de datos en Matlab
title matlab (4)
No estoy seguro de si ha escrito algún código hasta el momento. El siguiente enlace de mathworks muestra ejemplos de muestreo aleatorio. Eche un vistazo para obtener ideas.
También un código aquí con randsample de la caja de herramientas de estadísticas. Solo una lógica y es posible que tengas que ajustarla 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)
Arriba se obtiene una secuencia de n enteros aleatorios de 1 a N.
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?
Puedes usar randperm para esta tarea:
Muestreo sin reemplazo:
nRows = 10000; % number of rows
nSample = 1000; % number of samples
rndIDX = randperm(nRows);
newSample = data(rndIDX(1:nSample), :);
Muestreo con reemplazo:
nRows = 10000; % number of rows
nSample = 1000; % number of samples
rndIDX = randi(nRows, nSample, 1);
newSample = data(rndIDX, :);
Si tiene la caja de herramientas de estadísticas R2012 +, puede usar la datasample .
subset = datasample(data,1000)
subset
será un subconjunto de datos seleccionado al azar que consiste en 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 obtener más información sobre la diferencia entre muestreo con reemplazo versus muestreo sin reemplazo, consulte esta página .
Use randperm
en combinación con el número de filas. Si x
es tu 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