Comment sélectionner des échantillons aléatoires à partir d'un ensemble de données dans Matlab [dupliquer]

possibilité de dupliquer:

Comment puis-je sélectionner au hasard k points à partir de N points dans MATLAB?

disons que j'ai un ensemble de données qui comprend 10 000 lignes de données. Quelle est la meilleure façon de créer un sous-ensemble qui comprend 1000 lignes choisies au hasard?

23
demandé sur Community 2012-11-28 15:12:18

4 réponses

vous pouvez utiliser randperm pour cette tâche:

prélèvement sans remplacement:

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

rndIDX = randperm(nRows); 

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

prélèvement avec remplacement:

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

rndIDX = randi(nRows, nSample, 1); 

newSample = data(rndIDX, :); 
33
répondu H.Muster 2012-11-28 13:35:42

Utiliser randperm en combinaison avec le nombre de lignes. Si x est votre matrice:

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
répondu Justin 2012-11-28 11:21:21

si vous avez la boîte à outils statistiques R2012+, vous pouvez utiliser datasample .

subset = datasample(data,1000)

subset sera un sous-ensemble de données sélectionné au hasard et composé de 1000 échantillons.

pour échantillonner sans remplacement, utiliser:

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

si vous avez une version plus ancienne de la boîte à outils, vous pouvez utiliser 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), :);

mais en utilisant randsample est plus ou moins la même que la réponse de H. Muster (que j'ai accepté comme la meilleure parce qu'elle ne nécessite pas de boîte à outils).

Note: Pour plus d'informations sur le différence entre l'échantillonnage avec remplacement et l'échantillonnage sans remplacement, voir cette page .

4
répondu robguinness 2012-11-28 13:52:19

Je ne sais pas si vous avez écrit un code. Le lien suivant mathworks montre des exemples d'échantillonnage aléatoire. Prendre un coup d'oeil pour des idées.

aussi un code ici avec randsample de la boîte à outils statistiques. Juste une logique et vous pourriez avoir à ajuster en conséquence.

matrice m de N lignes tirer un échantillon aléatoire de n Lignes de m

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

randsample(1:N,n)

ci-dessus résulte en une séquence de n entiers aléatoires de 1 à N.

1
répondu bonCodigo 2012-11-28 11:28:17