diff --git a/balanceClasses.m b/balanceClasses.m index e389592..3ccbd98 100644 --- a/balanceClasses.m +++ b/balanceClasses.m @@ -1,5 +1,5 @@ -function [trainClasses,trainData]=balanceClasses(trainClasses,trainData,eps) - while sum(abs(diff(histcounts(trainClasses,size(unique(trainClasses),2)))))> 0+eps +function [trainClasses,trainData]=balanceClasses(trainClasses,trainData,noClasses,eps) + while sum(abs(diff(histcounts(trainClasses,noClasses))))> 0+eps mostFrequent=find(trainClasses==mode(trainClasses)); r=floor(size(mostFrequent,2)*rand(1)+1); @@ -7,4 +7,5 @@ trainClasses=trainClasses([1:delIndex-1,delIndex+1:end]); trainData=trainData([1:delIndex-1,delIndex+1:end]); end + assert(size(trainClasses,2)>0) end \ No newline at end of file diff --git a/kfoldCV.m b/kfoldCV.m index 9deb989..7a7e62f 100644 --- a/kfoldCV.m +++ b/kfoldCV.m @@ -1,5 +1,5 @@ function [model] = kfoldCV(classification,trainingData,k,cExpMax) - + noClasses=size(unique(classification),2); randMap=randperm(size(trainingData,1)); leaveOut=trainingData(mod(randMap,k+1)==0,:,:); leaveClasses=classification(mod(randMap,k+1)==0); @@ -17,16 +17,16 @@ testData=remaining(mod(randomMapping,k)+1==i,:,:); trainClasses=remainingClasses(mod(randomMapping,k)+1~=i); testClasses=remainingClasses(mod(randomMapping,k)+1==i); - [trainClasses,trainData]=balanceClasses(trainClasses,trainData,0.00001); + [trainClasses,trainData]=balanceClasses(trainClasses,trainData,noClasses,0.00001); model=svmtrain(trainClasses,trainData(:,:),sprintf('-t 0 -c %f -q',c)); [~, accurancy(i,:), ~]=svmpredict(testClasses, testData(:,:), model,'-q'); end - cvAccurancy=mean(accurancy(:,1)); + cvAccurancy(cExp+cExpMax+1)=mean(accurancy(:,1)); end [~,i]=max(cvAccurancy); bestC=2^(i-cExpMax-1); - [balanceLeftClasses, balanceLeftOut]=balanceClasses(leaveClasses,leaveOut,0.00001); + [balanceLeftClasses, balanceLeftOut]=balanceClasses(leaveClasses,leaveOut,noClasses,0.00001); model=svmtrain(balanceLeftClasses, balanceLeftOut(:,:),sprintf('-t 0 -c %f -q',bestC)); end \ No newline at end of file diff --git a/svm.m b/svm.m index f30be1f..fe62691 100644 --- a/svm.m +++ b/svm.m @@ -1,11 +1,11 @@ %params NFFT=2048; -cutWindow=2; +cutWindow=1; window=0.2; shift=0.05; k=10; -rounds=1; -maxExpC=5; +rounds=75; +maxExpC=7; %svm [signal, states, params] = load_bcidat('/home/jph/Uni/masterarbeit/Block1_ReachingMovements/AO/AO_B1001/AO_B1S001R01.dat'); @@ -15,7 +15,18 @@ %trainingData has format trial x ch x powerSpectrum [trainingDataEEG,trainingDataEMG]=generateTrainingData(splitSignals,NFFT,window,shift,params); -classification=code;%double(code<=5); +%classify for different movements and rest +classification=zeros(size(code)); +for i=1:size(code) + if code(i)<=5 + classification(i)=code(i); + else + classification(i)=0; + end +end + +%classify for move/rest +%classification=double(code<=5); accurancy=zeros(rounds,3);