Newer
Older
masterarbeit / svm.m
%params
NFFT=2048;
cutWindowEEG=2;
window=0.2;
shift=0.05;
k=10;
rounds=1;
maxExpC=7;

%svm
load('/home/jph/Uni/masterarbeit/data/AO1.mat');

[ splitSignals, code ] = cutMovements( stimulusCodes, signal );
%[ splitSignals, code ] = cutWindows( stimulusCodes, signal, params, cutWindow );

%trainingData has format trial x ch x powerSpectrum
[trainingDataEEG,trainingDataEMG]=generateTrainingData(splitSignals,NFFT,window,shift,params,cutWindowEEG);

%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
% cann't use cutMovements then
%classification=double(code<=5);

%choose to estimate based on EEG or EMG
trainingData=trainingDataEEG;


accurancy=zeros(rounds,3);
means=zeros(rounds,1);
for i=1:rounds
    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);

    model=kfoldCV(remainingClasses,remaining,k,maxExpC);

    [predictions,accurancy(i,:),pvalues]=svmpredict(leaveClasses,leaveOut(:,:),model);
    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)