diff --git a/kfoldCV.m b/kfoldCV.m index 29deb48..f49d0e6 100644 --- a/kfoldCV.m +++ b/kfoldCV.m @@ -1,32 +1,27 @@ function [model] = kfoldCV(classification,trainingData,k,cExpMax) noClasses=size(unique(classification),2); - randMap=randperm(size(trainingData,1)); - leaveOut=trainingData; - leaveClasses=classification; - remaining=trainingData(mod(randMap,k+1)~=0,:,:); - remainingClasses=classification(mod(randMap,k+1)~=0); cvAccurancy=zeros(2*cExpMax+1,1); - for cExp=-cExpMax:1:cExpMax - c=2^cExp; + parfor cExp=1:2*cExpMax+1 + c=2^(cExp-cExpMax-1); - randomMapping=randperm(size(remaining,1)); + randomMapping=randperm(size(trainingData,1)); accurancy=zeros(k,3); - parfor i=1:k - trainData=remaining(mod(randomMapping,k)+1~=i,:,:); - testData=remaining(mod(randomMapping,k)+1==i,:,:); - trainClasses=remainingClasses(mod(randomMapping,k)+1~=i); - testClasses=remainingClasses(mod(randomMapping,k)+1==i); + for i=1:k + trainData=trainingData(mod(randomMapping,k)+1~=i,:,:); + testData=trainingData(mod(randomMapping,k)+1==i,:,:); + trainClasses=classification(mod(randomMapping,k)+1~=i); + testClasses=classification(mod(randomMapping,k)+1==i); [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(cExp+cExpMax+1)=mean(accurancy(:,1)); + cvAccurancy(cExp)=mean(accurancy(:,1)); end - [~,i]=max(cvAccurancy); - bestC=2^(i-cExpMax-1); - [balanceLeftClasses, balanceLeftOut]=balanceClasses(leaveClasses,leaveOut,noClasses,0.00001); + [~,maxC]=max(cvAccurancy); + bestC=2^(maxC-cExpMax-1); + [balanceLeftClasses, balanceLeftOut]=balanceClasses(classification,trainingData,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 3780e04..62cc6cf 100644 --- a/svm.m +++ b/svm.m @@ -37,12 +37,12 @@ accurancy=zeros(rounds,3); means=zeros(rounds,1); -for i=1:rounds +for i=1:k randMap=randperm(size(trainingData,1)); - leaveOut=trainingData(mod(randMap,k+2)==0,:,:); - leaveClasses=classification(mod(randMap,k+2)==0); - remaining=trainingData(mod(randMap,k+2)~=0,:,:); - remainingClasses=classification(mod(randMap,k+2)~=0); + leaveOut=trainingData(mod(randMap,k+1)==i,:,:); + leaveClasses=classification(mod(randMap,k+1)==i); + remaining=trainingData(mod(randMap,k+1)~=i,:,:); + remainingClasses=classification(mod(randMap,k+1)~=i); model=kfoldCV(remainingClasses,remaining,k,maxExpC); @@ -50,5 +50,4 @@ means(i)=mean(leaveClasses-predictions); %confusion matrix %cf: for each cue what was the prediction (maybe colourCoded) end -m=mean(accurancy(:,1)) -mm=mean(means) \ No newline at end of file +meanAccurancy=mean(accurancy(:,1)) \ No newline at end of file