web-dev-qa-db-fra.com

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

Duplicata possible:
Comment puis-je sélectionner au hasard k points parmi 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 comprenant 1 000 lignes choisies au hasard?

23
robguinness

Vous pouvez utiliser randperm pour cette tâche:

Échantillonnage sans remplacement:

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

rndIDX = randperm(nRows); 

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

Échantillonnage avec remplacement:

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

rndIDX = randi(nRows, nSample, 1); 

newSample = data(rndIDX, :); 
33
H.Muster

Utilisez 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
Justin

Si vous disposez de la boîte à outils de statistiques R2012 +, vous pouvez utiliser échantillon de données .

subset = datasample(data,1000)

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

Pour échantillonner sans remplacement, utilisez:

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

Si vous avez une ancienne version 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 l'utilisation de randsample est plus ou moins la même que la réponse de H.Muster (que j'ai acceptée comme la meilleure car elle ne nécessite aucune boîte à outils).

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

4
robguinness

Je ne sais pas si vous avez écrit du code jusqu'à présent. Le lien mathworks suivant montre des exemples d'échantillonnage aléatoire. Jetez-y un œil pour trouver des idées.

Également un code ici avec randsample de la boîte à outils de statistiques. Juste une logique et vous devrez peut-être l'ajuster en conséquence.

la matrice m de N lignes extrait 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 nombres entiers aléatoires de 1 à N.

1
bonCodigo