Christoph Budziszewski commited on 2009-04-07 16:43:52
Zeige 4 geänderte Dateien mit 83 Einfügungen und 83 Löschungen.
git-svn-id: https://svn.discofish.de/MATLAB/spmtoolbox/SVMCrossVal@174 83ab2cfd-5345-466c-8aeb-2b2739fb922d
| ... | ... |
@@ -133,8 +133,12 @@ switch task |
| 133 | 133 |
assignin('base','decode',decode);
|
| 134 | 134 |
case 'SOM' |
| 135 | 135 |
display('SOM');
|
| 136 |
- disp('not implemented')
|
|
| 137 |
- |
|
| 136 |
+ somopts.size = [3 3]; |
|
| 137 |
+ somopts.lattice = 'rect'; |
|
| 138 |
+ somopts.nfold = 6; |
|
| 139 |
+ decode = som_subject_batch(header,data,somopts); |
|
| 140 |
+ decode.header = header; |
|
| 141 |
+ assignin('base','decode',decode);
|
|
| 138 | 142 |
case 'XSOM' |
| 139 | 143 |
display('XSOM');
|
| 140 | 144 |
somopts.size = [3 3]; |
| ... | ... |
@@ -1,80 +0,0 @@ |
| 1 |
-%% subject loop |
|
| 2 |
-function decode = som_combined_subject_batch(header,subjectdata,somOpts) |
|
| 3 |
- |
|
| 4 |
-somOpts.size = [3 3]; |
|
| 5 |
-somOpts.lattice = 'rect'; |
|
| 6 |
- |
|
| 7 |
-addpath 'somtoolbox2'; |
|
| 8 |
- |
|
| 9 |
-% nSubjects = numel(subjectdata); |
|
| 10 |
-% if(nSubjects < 2) |
|
| 11 |
-% error('SVMCrossVal:xsvmSubjectLoop:tooFewSubjects','You need at least 2 Subjects in this Across-Subject analysis!');
|
|
| 12 |
-% end |
|
| 13 |
- |
|
| 14 |
-RANDOMIZE_DATAPOINTS = 1; |
|
| 15 |
- |
|
| 16 |
-decode = struct; |
|
| 17 |
-decode.decodePerformance = []; |
|
| 18 |
-decode.rawTimeCourse = []; |
|
| 19 |
- |
|
| 20 |
-disp(sprintf('computinig additional datastructs for %u subjects',nSubjects));
|
|
| 21 |
- |
|
| 22 |
-timeline = header.timeline; |
|
| 23 |
-timeline.frameShiftStart = header.frameShift.frameShiftStart; |
|
| 24 |
-timeline.frameShiftEnd = header.frameShift.frameShiftEnd; |
|
| 25 |
-timeline.decodeDuration = header.frameShift.decodeDuration; |
|
| 26 |
- |
|
| 27 |
-% TimePointMatrix |
|
| 28 |
-for subjectDataID = 1:nSubjects |
|
| 29 |
- currentSubject = subjectdata{subjectDataID};
|
|
| 30 |
- timePointArgs.pst = currentSubject.pst; |
|
| 31 |
- timePointArgs.labelMap = LabelMap(header.classDef.labelCells,header.classDef.conditionCells); |
|
| 32 |
- timePointArgs.eventList = header.classDef.eventMatrix; |
|
| 33 |
- |
|
| 34 |
- timePointMatrix{subjectDataID} = buildTimePointMatrix(timeline,timePointArgs);
|
|
| 35 |
- |
|
| 36 |
- decode.rawTimeCourse = [decode.rawTimeCourse currentSubject.pst]; |
|
| 37 |
-end |
|
| 38 |
- |
|
| 39 |
-% timeframe x-subject validation |
|
| 40 |
-timeLineStart = timeline.frameShiftStart; |
|
| 41 |
-timeLineEnd = timeline.frameShiftEnd; |
|
| 42 |
- |
|
| 43 |
-display(sprintf('%u -fold cross validation for %u timeslices.\n',nSubjects,size(1:timeLineEnd-timeLineStart+1,2)));
|
|
| 44 |
-% disp(sprintf('Press ANY-Key to continue.\n Use Retrun if your Keyboard lacks the ANY-Key.'));
|
|
| 45 |
-% pause |
|
| 46 |
- |
|
| 47 |
-for timeIndex = 1:timeLineEnd-timeLineStart+1 |
|
| 48 |
- cross_value = []; |
|
| 49 |
- for validationSubjectID = 1:nSubjects |
|
| 50 |
- svm_train_label = []; |
|
| 51 |
- svm_train_data = []; |
|
| 52 |
- svm_validation_label = []; |
|
| 53 |
- svm_validation_data = []; |
|
| 54 |
- for subjectDataID = 1:nSubjects |
|
| 55 |
- svmstruct = calculateSVMTables(timePointMatrix{subjectDataID},timeIndex);
|
|
| 56 |
- if subjectDataID == validationSubjectID |
|
| 57 |
- svm_validation_label = svmstruct.svmlabel; |
|
| 58 |
- svm_validation_data = svmstruct.svmdata; |
|
| 59 |
- else |
|
| 60 |
- svm_train_label = [svm_train_label; svmstruct.svmlabel]; |
|
| 61 |
- svm_train_data = [svm_train_data; svmstruct.svmdata]; |
|
| 62 |
- end |
|
| 63 |
- end |
|
| 64 |
- |
|
| 65 |
- if RANDOMIZE_DATAPOINTS |
|
| 66 |
- rndindex = randperm(length(svm_train_label)); |
|
| 67 |
- svm_train_data = svm_train_data(rndindex,:); |
|
| 68 |
- svm_train_label = svm_train_label(rndindex); |
|
| 69 |
- end |
|
| 70 |
- |
|
| 71 |
- [sD sM] = train_som(svm_train_label, svm_train_data, somOpts); |
|
| 72 |
- |
|
| 73 |
- performance = som_decode(sD, sM, svm_validation_data,svm_validation_label); |
|
| 74 |
- |
|
| 75 |
- cross_value = [cross_value performance]; |
|
| 76 |
- decode.decodePerformance = [decode.decodePerformance; cross_value]; |
|
| 77 |
-end |
|
| 78 |
- display('decode done');
|
|
| 79 |
-end |
|
| 80 |
- |
| ... | ... |
@@ -0,0 +1,76 @@ |
| 1 |
+%% subject loop |
|
| 2 |
+function decode = som_subject_batch(header,subjectdata,somOpts) |
|
| 3 |
+ |
|
| 4 |
+addpath 'somtoolbox2'; |
|
| 5 |
+ |
|
| 6 |
+RANDOMIZE_DATAPOINTS = 1; |
|
| 7 |
+ |
|
| 8 |
+decode = struct; |
|
| 9 |
+decode.decodePerformance = []; |
|
| 10 |
+decode.rawTimeCourse = []; |
|
| 11 |
+ |
|
| 12 |
+nSubjects = numel(subjectdata); |
|
| 13 |
+disp(sprintf('batch processing %u subjects',nSubjects));
|
|
| 14 |
+ |
|
| 15 |
+timeline = header.timeline; |
|
| 16 |
+timeline.frameShiftStart = header.frameShift.frameShiftStart; |
|
| 17 |
+timeline.frameShiftEnd = header.frameShift.frameShiftEnd; |
|
| 18 |
+timeline.decodeDuration = header.frameShift.decodeDuration; |
|
| 19 |
+ |
|
| 20 |
+ |
|
| 21 |
+timeLineStart = timeline.frameShiftStart; |
|
| 22 |
+timeLineEnd = timeline.frameShiftEnd; |
|
| 23 |
+ |
|
| 24 |
+% TimePointMatrix |
|
| 25 |
+for subjectDataID = 1:nSubjects |
|
| 26 |
+ currentSubject = subjectdata{subjectDataID};
|
|
| 27 |
+ timePointArgs.pst = currentSubject.pst; |
|
| 28 |
+ timePointArgs.labelMap = LabelMap(header.classDef.labelCells,header.classDef.conditionCells); |
|
| 29 |
+ timePointArgs.eventList = header.classDef.eventMatrix; |
|
| 30 |
+ |
|
| 31 |
+ timePointMatrix{subjectDataID} = buildTimePointMatrix(timeline,timePointArgs);
|
|
| 32 |
+ |
|
| 33 |
+ decode.rawTimeCourse = [decode.rawTimeCourse currentSubject.pst]; |
|
| 34 |
+ |
|
| 35 |
+ |
|
| 36 |
+ display(sprintf('%u -fold cross validation for %u timeslices.\n',somOpts.nfold,size(1:timeLineEnd-timeLineStart+1,2)));
|
|
| 37 |
+ |
|
| 38 |
+ |
|
| 39 |
+ for timeIndex = 1:timeLineEnd-timeLineStart+1 |
|
| 40 |
+ svmstruct = calculateSVMTables(timePointMatrix{subjectDataID},timeIndex);
|
|
| 41 |
+ nElements = length(svmstruct.svmlabel); |
|
| 42 |
+ |
|
| 43 |
+ if RANDOMIZE_DATAPOINTS |
|
| 44 |
+ rndindex = randperm(nElements); |
|
| 45 |
+ svmstruct.svmdata = svmstruct.svmdata(rndindex,:); |
|
| 46 |
+ svmstruct.svmlabel = svmstruct.svmlabel(rndindex); |
|
| 47 |
+ end |
|
| 48 |
+ |
|
| 49 |
+ chunksize = nElements / somOpts.nfold; |
|
| 50 |
+ |
|
| 51 |
+ cross_value = 0; |
|
| 52 |
+ for iFold = 1:somOpts.nfold |
|
| 53 |
+ chunkstart = (iFold-1)*chunksize+1; |
|
| 54 |
+ chunkend = min(iFold*chunksize,nElements); |
|
| 55 |
+ |
|
| 56 |
+ svm_train_label = svmstruct.svmlabel; |
|
| 57 |
+ svm_train_data = svmstruct.svmdata; |
|
| 58 |
+ |
|
| 59 |
+ svm_validation_label = svmstruct.svmlabel(chunkstart:chunkend); |
|
| 60 |
+ svm_validation_data = svmstruct.svmdata(chunkstart:chunkend,:); |
|
| 61 |
+ |
|
| 62 |
+ svm_train_label(chunkstart:chunkend) = []; %del test set |
|
| 63 |
+ svm_train_data(chunkstart:chunkend,:) = [];% del test set |
|
| 64 |
+ |
|
| 65 |
+ [sD sM] = som_train(svm_train_label, svm_train_data, somOpts); |
|
| 66 |
+ |
|
| 67 |
+ performance = som_decode(sM, svm_validation_data,svm_validation_label); |
|
| 68 |
+ |
|
| 69 |
+ cross_value = [cross_value, performance]; |
|
| 70 |
+ end |
|
| 71 |
+ decode.decodePerformance = [decode.decodePerformance; cross_value]; |
|
| 72 |
+ end |
|
| 73 |
+end |
|
| 74 |
+display('decode done');
|
|
| 75 |
+end |
|
| 76 |
+ |
| ... | ... |
@@ -346,7 +346,7 @@ pSOM = uipanel(parent,'Units','normalized','Position',[0.5 0.4 0.5 0.4]); |
| 346 | 346 |
btnRunSOM = uicontrol(pSOM,'String','run SOM Crossvalidation',... |
| 347 | 347 |
'Units','normalized',... |
| 348 | 348 |
'Position',[0.0 0.25 1 0.25]); |
| 349 |
- set(btnRunSOM,'Enable','off'); |
|
| 349 |
+ set(btnRunSOM,'Enable','on'); |
|
| 350 | 350 |
|
| 351 | 351 |
btnRunXSOM = uicontrol(pSOM,'String','run SOM X-Subject validation',... |
| 352 | 352 |
'Units','normalized',... |
| 353 | 353 |