# Select the same number of samples from each class.

7 Ansichten (letzte 30 Tage)
DuckDuck am 6 Jul. 2018
Kommentiert: DuckDuck am 9 Jul. 2018
Say I have a table with 2 columns, one column stores the value the other the class of the value. The classes are imbalanced. I want to randomly select the same number of samples from each class. Is there any easy way to do it in Matlab.
##### 1 KommentarKeine anzeigenKeine ausblenden
Jan am 6 Jul. 2018
Please post some Matlab code, which creates a small data set. I cannot guess, how you store "values" and "classes". What does "imbalanced" mean here?

Melden Sie sich an, um zu kommentieren.

### Akzeptierte Antwort

KSSV am 6 Jul. 2018
% create some random data for demo
K = 3 ; % number of groups
N = 5000 ;
x = rand(N,1) ;
y = rand(N,1) ;
% apply kmeans to divide points into 3 groups
idx = kmeans([x,y],K) ;
A = [x y idx] ; % the data with three classes
% Get number of data in each class
ng1 = nnz(idx==1) ; % number of points in group 1
ng2 = nnz(idx==2) ; % number of points in group 1
ng3 = nnz(idx==3) ; % number of points in group 1
% select data for each group
N = min([ng1 ng2 ng3]) ;
iwant = cell(K,1) ;
for i = 1:K
G=A(A(:,3)==i,:) ; % group data
idx = randperm(size(G,1),N) ;
iwant{i} = G(idx) ;
end
##### 1 KommentarKeine anzeigenKeine ausblenden
DuckDuck am 9 Jul. 2018
Thanks, actually I was missing randperm part. That's why I asked.

Melden Sie sich an, um zu kommentieren.

### Kategorien

Find more on Logical in Help Center and File Exchange

R2017b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!