Newer
Older
msccd / matlabCode / balanceClasses.m
@Jan-Peter Hohloch Jan-Peter Hohloch on 23 Nov 2016 894 bytes first commit
function [trainClasses,trainData]=balanceClasses(trainClasses,trainData,maxPerClass,noClasses)
    if maxPerClass > min(histcounts(trainClasses,noClasses))
        maxPerClass=min(histcounts(trainClasses));
        warning('not enough Data per Class; set maxPerClass to %i', maxPerClass);
    end
    i=1;
    % number of elements per class that has to be deleted
    delPerClass=histcounts(trainClasses,noClasses)-maxPerClass;
    delIndex=zeros(sum(delPerClass),1); % collects the indices that will be deleted
    while sum(delPerClass)>0
        r=fix(size(trainClasses,1)*rand(1)+1);
        if delPerClass(trainClasses(r)+1)>0 && all(delIndex~=r)
            delIndex(i)=r;
            i=i+1;
            delPerClass(trainClasses(r)+1)=delPerClass(trainClasses(r)+1)-1;
        end
    end
    trainClasses(delIndex)=[];
    trainData(delIndex,:)=[];
    assert(size(trainClasses,1)>0)
end