Select the same number of samples from each class.

1 view (last 30 days)
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 Comment
Jan
Jan on 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?

Sign in to comment.

Accepted Answer

KSSV
KSSV on 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

More Answers (0)

Tags

Products


Release

R2017b

Community Treasure Hunt

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

Start Hunting!