diff --git a/usedMcode/calcRidgeCorrelation.m b/usedMcode/calcRidgeCorrelation.m deleted file mode 100644 index 7937a3c..0000000 --- a/usedMcode/calcRidgeCorrelation.m +++ /dev/null @@ -1,6 +0,0 @@ -function [correlation]=calcRidgeCorrelation(kin,data,coeffs) - prediction=coeffs(1)+coeffs(2:end)*data; %TODO check - - correlation=corr(kin,prediction); - -end \ No newline at end of file diff --git a/usedMcode/callAll.m b/usedMcode/callAll.m index 8c14943..424a4f7 100644 --- a/usedMcode/callAll.m +++ b/usedMcode/callAll.m @@ -41,8 +41,8 @@ readEEG(pathToFile,subject,number,windowEMG,windowEEG,shift,maxFile,threshold,pburgOrder,minEEGFreq,maxEEGFreq); [meanAccurancysEMG(j),maxCEMG(j,:),cmScaledEMG(j,:,:)]=svmEciton(pathToFile,subject,number,false,k,maxExpC,maxPerClass); [meanAccurancysEEG(j),maxCEEG(j,:),cmScaledEEG(j,:,:)]=svmEciton(pathToFile,subject,number,EEG,k,maxExpC,maxPerClass); - [correlationEMG(j)]=ridgeCorrelation(pathToFile,subject,number,false,k); - [correlationEEG(j)]=ridgeCorrelation(pathToFile,subject,number,EEG,k); + [correlationEMG(j)]=ridgeCV(pathToFile,subject,number,false,k); + [correlationEEG(j)]=ridgeCV(pathToFile,subject,number,EEG,k); j=j+1; end end diff --git a/usedMcode/kFoldRidge.m b/usedMcode/kFoldRidge.m new file mode 100644 index 0000000..dadfb6d --- /dev/null +++ b/usedMcode/kFoldRidge.m @@ -0,0 +1,30 @@ +function [coeffs]=kFoldRidge(kin,data,k,ridgeParams) + if any(size(ridgeParams)>1) + + correlationPerParam=zeros(size(ridgeParams)); + + for param=ridgeParams + + randomMapping=transpose(randperm(size(data,1))); + correlations=zeros(k,1); + + parfor i=1:k + trainData=data(mod(randomMapping,k)+1~=i,:,:); + testData=data(mod(randomMapping,k)+1==i,:,:); + trainKin=kin(mod(randomMapping,k)+1~=i); + testKin=kin(mod(randomMapping,k)+1==i); + + coeffs=ridge(trainData,trainKin,param,0); + correlations(i)=ridgeCorrelation(testKin,testData,coeffs); + end + + correlationPerParam(ridgeParams==param)=mean(correlations); + end + [~,maxRidgeParamIndex]=max(correlationPerParam); + coeffs=ridge(data,kin,ridgeParams(maxRidgeParamIndex),0); + + + else + coeffs=ridge(kin,data,ridgeParams(1),0); + end +end \ No newline at end of file diff --git a/usedMcode/kfoldCV.m b/usedMcode/kfoldCV.m index 94f27d8..af80d84 100644 --- a/usedMcode/kfoldCV.m +++ b/usedMcode/kfoldCV.m @@ -2,13 +2,13 @@ noClasses=size(unique(classification),1); if cExpMax>0 %CV only if necessary cvAccurancy=zeros(2*cExpMax+1,1); - parfor cExp=1:2*cExpMax+1 + for cExp=1:2*cExpMax+1 c=2^(cExp-cExpMax-1); randomMapping=transpose(randperm(size(trainingData,1))); accurancy=zeros(k,3); - for i=1:k + parfor i=1:k trainData=trainingData(mod(randomMapping,k)+1~=i,:,:); testData=trainingData(mod(randomMapping,k)+1==i,:,:); trainClasses=classification(mod(randomMapping,k)+1~=i); diff --git a/usedMcode/ridgeCV.m b/usedMcode/ridgeCV.m new file mode 100644 index 0000000..1f18694 --- /dev/null +++ b/usedMcode/ridgeCV.m @@ -0,0 +1,29 @@ +function [correlation]=ridgeCV(pathToFile,subject,number,EEG,k,ridgeParams) + load(strcat(pathToFile,sprintf('../matlabData/%s%i200msWindowEMG1sWindowEEG200msShift1sPauseFreq0to200.mat',subject,number))); + clear classification; + if EEG + trainingData=trainingDataEEG; + else + trainingData=trainingDataEMG; + end + clear trainingDataEEG; + clear trainingDataEMG; + + randMap=randperm(size(trainingData,1)); + kin=kinematics; + correlations=zeros([k,1]); + + parfor i=1:k + leaveOut=trainingData(mod(randMap,k)==i-1,:,:); + leaveKin=kin(mod(randMap,k)==i-1,:); + remaining=trainingData(mod(randMap,k)~=i-1,:,:); + remainingKin=kin(mod(randMap,k)~=i-1,:); + %fprintf('%s create %ith model\n',datestr(datetime('now')),i) + + [coeffs]=kFoldRidge(remainingKin,remaining,k,ridgeParams); + + correlations(i)=ridgeCorrelation(leaveKin,leaveOut,coeffs); + end + + correlation=mean(correlations); +end \ No newline at end of file diff --git a/usedMcode/ridgeCorrelation.m b/usedMcode/ridgeCorrelation.m index 4d92957..5834a7e 100644 --- a/usedMcode/ridgeCorrelation.m +++ b/usedMcode/ridgeCorrelation.m @@ -1,29 +1,6 @@ -function [correlation]=ridgeCorrelation(pathToFile,subject,number,EEG,k,ridgeParams) - load(strcat(pathToFile,sprintf('../matlabData/%s%i200msWindowEMG1sWindowEEG200msShift1sPauseFreq0to200.mat',subject,number))); - clear classification; - if EEG - trainingData=trainingDataEEG; - else - trainingData=trainingDataEMG; - end - clear trainingDataEEG; - clear trainingDataEMG; +function [correlation]=ridgeCorrelation(kin,data,coeffs) + prediction=coeffs(1)+data*coeffs(2:end); - randMap=randperm(size(trainingData,1)); - kin=kinematics; - correlations=zeros([k,1]); - - parfor i=1:k - leaveOut=trainingData(mod(randMap,k)==i-1,:,:); - leaveKin=kin(mod(randMap,k)==i-1,:); - remaining=trainingData(mod(randMap,k)~=i-1,:,:); - remainingKin=kin(mod(randMap,k)~=i-1,:); - %fprintf('%s create %ith model\n',datestr(datetime('now')),i) - - [coeffs]=kFoldRidge(remainingKin,remaining,k,ridgeParams); - - correlations(i)=ridgeCorrelation(leaveKin,leaveOut,coeffs); - end - - correlation=mean(correlations); + correlation=corr(kin,prediction); + end \ No newline at end of file