diff --git a/callAll.m b/callAll.m index b43c83c..adc2c97 100644 --- a/callAll.m +++ b/callAll.m @@ -15,13 +15,13 @@ poolObj=parpool(32); [subjects,numbers]=structForAllDays(pathToFile); -for i=1:size(subjects,2) +parfor i=1:size(subjects,2) subject=subjects{i}; for number=numbers(i,:) %fprintf('%s%i\n',subject,number); readEEGEciton(subject,number,windowEMG,windowEEG,shift,5,7500,pburgOrder,minEEGFreq,maxEEGFreq); - svmEciton(subject,number,false,k,maxExpC,maxPerClass,poolObj); - svmEciton(subject,number,EEG,k,maxExpC,maxPerClass,poolObj); + svmEciton(subject,number,false,k,maxExpC,maxPerClass); + svmEciton(subject,number,EEG,k,maxExpC,maxPerClass); end end delete(poolObj) diff --git a/kfoldCV.m b/kfoldCV.m index 7194ee3..94f27d8 100644 --- a/kfoldCV.m +++ b/kfoldCV.m @@ -1,5 +1,6 @@ function [model,maxC] = kfoldCV(classification,trainingData,k,cExpMax,maxDataPerClass) noClasses=size(unique(classification),1); +if cExpMax>0 %CV only if necessary cvAccurancy=zeros(2*cExpMax+1,1); parfor cExp=1:2*cExpMax+1 c=2^(cExp-cExpMax-1); @@ -21,8 +22,11 @@ cvAccurancy(cExp)=mean(accurancy(:,1)); end [~,maxC]=max(cvAccurancy); +else + maxC=1; %no gridsearch since only one C possible +end bestC=2^(maxC-cExpMax-1); [balancedClasses, balanceData]=balanceClasses(classification,trainingData,maxDataPerClass,noClasses); model=svmtrain(balancedClasses, balanceData(:,:),sprintf('-t 0 -c %f -q',bestC)); -end \ No newline at end of file +end diff --git a/svmEciton.m b/svmEciton.m index e9c04b1..6087e61 100644 --- a/svmEciton.m +++ b/svmEciton.m @@ -1,5 +1,6 @@ -function svmEciton(subject,number,EEG,k,maxExpC,maxPerClass,poolObj) +function svmEciton(subject,number,EEG,k,maxExpC,maxPerClass) load(sprintf('/nfs/wsi/ti/messor/hohlochj/matlabData/%s%i200msWindowEMG1sWindowEEG200msShift1sPauseFreq0to200.mat',subject,number)); +% fprintf('%i,%i,%i',size(trainingDataEMG,1),size(trainingDataEEG,1),size(classification,1)) addpath('/nfs/wsi/ti/messor/hohlochj/libsvm/matlab'); %k=2; %maxExpC=0; % c\in {2^i|i=-maxExpC:1:maxExpC} @@ -12,8 +13,8 @@ end clear trainingDataEEG; clear trainingDataEMG; - addAttachedFiles(poolObj,'classification'); - addAttachedFiles(poolObj,'trainingData'); +% addAttachedFiles(poolObj,'classification'); +% addAttachedFiles(poolObj,'trainingData'); accurancy=zeros(k,3); maxC=zeros(k,1); @@ -21,13 +22,15 @@ cm=zeros(noClasses); randMap=randperm(size(trainingData,1)); disp('startCV') + classes=classification; %necessary since otherwise classes are not passed to workers + clear classification; parfor i=1:k leaveOut=trainingData(mod(randMap,k)==i-1,:,:); - leaveClasses=classification(mod(randMap,k)==i-1); + leaveClasses=classes(mod(randMap,k)==i-1); remaining=trainingData(mod(randMap,k)~=i-1,:,:); - remainingClasses=classification(mod(randMap,k)~=i-1); - disp(datestr(datetime('now'))) - fprintf('create %ith model\n',i) + remainingClasses=classes(mod(randMap,k)~=i-1); + fprintf('%s create %ith model\n',datestr(datetime('now')),i) + [model,maxC(i)]=kfoldCV(remainingClasses,remaining,k,maxExpC,maxPerClass); disp(datestr(datetime('now')))