Christoph Budziszewski commited on 2009-03-05 16:47:04
Zeige 5 geänderte Dateien mit 89 Einfügungen und 23 Löschungen.
git-svn-id: https://svn.discofish.de/MATLAB/spmtoolbox/SVMCrossVal@143 83ab2cfd-5345-466c-8aeb-2b2739fb922d
... | ... |
@@ -1,10 +1,8 @@ |
1 |
-function outputStruct = calculateDecodePerformance(timeline,subjectStruct,model) |
|
1 |
+function outputStruct = calculateDecodePerformance(timeline,subjectStruct,svmopts) |
|
2 | 2 |
outputStruct = struct; |
3 |
-RANDOMIZE_DATAPOINTS = 0; |
|
3 |
+RANDOMIZE_DATAPOINTS = 1; |
|
4 | 4 |
|
5 | 5 |
|
6 |
-eventList = inputStruct.eventList; |
|
7 |
- |
|
8 | 6 |
timeLineStart = timeline.frameShiftStart; |
9 | 7 |
timeLineEnd = timeline.frameShiftEnd; |
10 | 8 |
|
... | ... |
@@ -17,11 +15,8 @@ timeLineEnd = timeline.frameShiftEnd; |
17 | 15 |
% pst{iVoxel} = calculatePST(timeline,calculatePstOpts,rawdata); |
18 | 16 |
% end |
19 | 17 |
|
20 |
- |
|
21 |
- |
|
22 |
-timePointArgs.pst = pst; |
|
23 |
- |
|
24 |
-timePointArgs.labelMap = inputStruct.labelMap; |
|
18 |
+timePointArgs.pst = subjectStruct.pst; |
|
19 |
+timePointArgs.labelMap = labelMap; |
|
25 | 20 |
timePointArgs.eventList = eventList; |
26 | 21 |
|
27 | 22 |
timePointMatrix = buildTimePointMatrix(timeline,timePointArgs); |
... | ... |
@@ -0,0 +1,33 @@ |
1 |
+%% subject loop |
|
2 |
+function decode = calculateMultiSubjectDecodePerformance(header,subjectdata,svmopts) |
|
3 |
+ |
|
4 |
+ |
|
5 |
+ |
|
6 |
+decode = struct; |
|
7 |
+decode.decodePerformance = []; |
|
8 |
+decode.rawTimeCourse = []; |
|
9 |
+ |
|
10 |
+for subjectDataID = 1:size(subjectdata) |
|
11 |
+% SubjectID = cell2mat(subjectCell); |
|
12 |
+ currentSubject = subjectdata{subjectDataID}; |
|
13 |
+ |
|
14 |
+ namehelper = strcat('s',currentSubject.name); %Vars can not start with numbers. |
|
15 |
+ |
|
16 |
+ display(sprintf('calculating cross-validation performance time-shift for Subject %s. Please Wait. ...',currentSubject.name)); |
|
17 |
+ display('switching off all warnings'); |
|
18 |
+ warning_state = warning('off','all'); |
|
19 |
+ display('calculating ...'); |
|
20 |
+ |
|
21 |
+ decode.(namehelper) = calculateDecodePerformance(header.timeline,currentSubject,svmopts); |
|
22 |
+ |
|
23 |
+ display('... done'); |
|
24 |
+ display('restoring warnings'); |
|
25 |
+ warning(warning_state); |
|
26 |
+ |
|
27 |
+ decode.decodePerformance = [decode.decodePerformance decode.(namehelper).decodePerformance]; |
|
28 |
+ decode.rawTimeCourse = [decode.rawTimeCourse decode.(namehelper).rawTimeCourse]; |
|
29 |
+ |
|
30 |
+ assignin('base','decode',decode); |
|
31 |
+end |
|
32 |
+ |
|
33 |
+end |
... | ... |
@@ -1,10 +1,20 @@ |
1 |
-function main(model,task) |
|
2 |
- |
|
3 |
-% parse the GUI and pass parameters as structure |
|
1 |
+function main(model,task,subtask) |
|
4 | 2 |
disp('RUN'); |
3 |
+switch task |
|
4 |
+ |
|
5 |
+ case 'pre' |
|
6 |
+ preprocess(model,subtask); |
|
7 |
+ case 'decode' |
|
8 |
+ decode(model,subtask); |
|
9 |
+end |
|
10 |
+end |
|
5 | 11 |
% disp('all warnings OFF') |
6 | 12 |
% warn = warning('off','all'); |
7 | 13 |
|
14 |
+ |
|
15 |
+function preprocess(model,task) |
|
16 |
+% parse the GUI and pass parameters as structure |
|
17 |
+ |
|
8 | 18 |
timeLine = getTimeLineParams(model); |
9 | 19 |
subjects = getSubjectCellList(model); |
10 | 20 |
classDef = parseClassDef(model); |
... | ... |
@@ -16,6 +26,14 @@ mask = ['^' cell2mat(getImageFileMask(model)) '.*\.img$']; |
16 | 26 |
switch task |
17 | 27 |
case 'COORD' |
18 | 28 |
disp('COORD'); |
29 |
+ |
|
30 |
+ out = struct; |
|
31 |
+ out.header = struct; |
|
32 |
+ out.header.type = 'COORD'; |
|
33 |
+ out.header.timeline = timeLine; |
|
34 |
+ out.header.classDef = classDef; |
|
35 |
+ |
|
36 |
+ |
|
19 | 37 |
coordargs = struct; |
20 | 38 |
coordargs.subjects = subjects; |
21 | 39 |
coordargs.timeline = timeLine; |
... | ... |
@@ -25,7 +43,9 @@ switch task |
25 | 43 |
coordargs.coords = parseCoordinateTextField(model); |
26 | 44 |
coordargs.mask = mask; |
27 | 45 |
|
28 |
- runCoordTable(coordargs) |
|
46 |
+ out.subjectdata = runCoordTable(coordargs); |
|
47 |
+ |
|
48 |
+ assignin('base','preprocessedData',out); |
|
29 | 49 |
|
30 | 50 |
case 'ROI' |
31 | 51 |
disp('ROI'); |
... | ... |
@@ -41,16 +61,27 @@ switch task |
41 | 61 |
runROIImageMaskMode(roiargs); |
42 | 62 |
|
43 | 63 |
case 'FBS' |
44 |
- disp('FBS') |
|
64 |
+ disp('not implemented') |
|
65 |
+end |
|
66 |
+end |
|
45 | 67 |
|
68 |
+function decode(model,task) |
|
69 |
+switch task |
|
46 | 70 |
case 'SVM' |
47 |
- disp('classify with svm'); |
|
71 |
+ disp('SVM'); |
|
72 |
+ svmopts = getSvmArgs(model,1); |
|
73 |
+ preprocessedData = evalin('base','preprocessedData'); |
|
74 |
+ calculateMultiSubjectDecodePerformance(preprocessedData.header,preprocessedData.subjectdata,svmopts); |
|
75 |
+ |
|
48 | 76 |
|
49 | 77 |
case 'X-SVM' |
78 |
+ disp('not implemented') |
|
50 | 79 |
|
51 | 80 |
case 'SOM' |
81 |
+ disp('not implemented') |
|
52 | 82 |
|
53 | 83 |
case 'X-SOM' |
84 |
+ disp('not implemented') |
|
54 | 85 |
|
55 | 86 |
end |
56 | 87 |
|
... | ... |
@@ -1,4 +1,4 @@ |
1 |
-function runCoordTable(args) |
|
1 |
+function subjectData = runCoordTable(args) |
|
2 | 2 |
|
3 | 3 |
global SVMCROSSVAL_SUBJECTSTRUCT_NAME; |
4 | 4 |
|
... | ... |
@@ -40,5 +40,6 @@ global SVMCROSSVAL_SUBJECTSTRUCT_NAME; |
40 | 40 |
disp(sprintf('done %g // %g',s,nSubjects)); |
41 | 41 |
end |
42 | 42 |
|
43 |
- assignin('base',SVMCROSSVAL_SUBJECTSTRUCT_NAME,subjectStruct); |
|
43 |
+ subjectData = subjectStruct; |
|
44 |
+% assignin('base',SVMCROSSVAL_SUBJECTSTRUCT_NAME,subjectStruct); |
|
44 | 45 |
end |
... | ... |
@@ -36,6 +36,7 @@ DEFAULT.wd = fullfile('d:','Analyze','Choice','24pilot'); |
36 | 36 |
|
37 | 37 |
model.txtBaseDir = createLabel(frame,[0 0.97 1 0.03],model.baseDir); |
38 | 38 |
set(model.txtBaseDir,'BackgroundColor','w'); |
39 |
+ set(model.txtBaseDir,'ForegroundColor','b'); |
|
39 | 40 |
|
40 | 41 |
pFirstStep = uipanel(frame,'Title','Preprocessing','Position',[0 0.25 1 0.720]); |
41 | 42 |
set(pFirstStep,'BackgroundColor','w'); |
... | ... |
@@ -126,28 +121,29 @@ pSOM = uipanel(parent,'Units','normalized','Position',[0.5 0.0 0.5 1]); |
126 | 121 |
set(model.txtSOMnfold,'Enable','off'); |
127 | 122 |
createLabel(pSOM,[0.5 0.50 0.5 0.25 ],'-Fold CrossVal'); |
128 | 123 |
|
124 |
+% buttons |
|
129 | 125 |
btnRunSVM = uicontrol(pSVM,'String','run SVM Crossvalidation',... |
130 | 126 |
'Units','normalized',... |
131 | 127 |
'Position',[0 0.25 1 0.25]); |
132 |
- set(btnRunSVM,'Callback',{@cbRunSVM,model}); % set here, because of model. |
|
133 |
- set(btnRunSVM,'Enable','off'); |
|
128 |
+ set(btnRunSVM,'Callback',{@cbRunDecode,model,'SVM'}); % set here, because of model. |
|
129 |
+ set(btnRunSVM,'Enable','on'); |
|
134 | 130 |
|
135 | 131 |
btnRunXSVM = uicontrol(pSVM,'String','run SVM X-Subject validation',... |
136 | 132 |
'Units','normalized',... |
137 | 133 |
'Position',[0 0.0 1 0.25]); |
138 |
- set(btnRunXSVM,'Callback',{@cbRunXSVM,model}); % set here, because of model. |
|
134 |
+ set(btnRunXSVM,'Callback',{@cbRunDecode,model,'XSVM'}); % set here, because of model. |
|
139 | 135 |
set(btnRunXSVM,'Enable','off'); |
140 | 136 |
|
141 | 137 |
btnRunSOM = uicontrol(pSOM,'String','run SOM Crossvalidation',... |
142 | 138 |
'Units','normalized',... |
143 | 139 |
'Position',[0.0 0.25 1 0.25]); |
144 |
- set(btnRunSOM,'Callback',{@cbRunSOM,model}); % set here, because of model. |
|
140 |
+ set(btnRunSOM,'Callback',{@cbRunDecode,model,'SOM'}); % set here, because of model. |
|
145 | 141 |
set(btnRunSOM,'Enable','off'); |
146 | 142 |
|
147 | 143 |
btnRunXSOM = uicontrol(pSOM,'String','run SOM X-Subject validation',... |
148 | 144 |
'Units','normalized',... |
149 | 145 |
'Position',[0.0 0.0 1 0.25]); |
150 |
- set(btnRunXSOM,'Callback',{@cbRunXSOM,model}); % set here, because of model. |
|
146 |
+ set(btnRunXSOM,'Callback',{@cbRunDecode,model,'XSOM'}); % set here, because of model. |
|
151 | 147 |
set(btnRunXSOM,'Enable','off'); |
152 | 148 |
end |
153 | 149 |
|
... | ... |
@@ -322,7 +318,11 @@ function model = createFirstStepPanel(model,parent,DEFAULT) |
322 | 318 |
end |
323 | 319 |
|
324 | 320 |
function cbRunPreprocessing(src,evnt,model,task) |
325 |
-main(model,task); |
|
321 |
+main(model,'pre',task); |
|
322 |
+end |
|
323 |
+ |
|
324 |
+function cbRunDecode(src,evnt,model,task) |
|
325 |
+main(model,'decode',task); |
|
326 | 326 |
end |
327 | 327 |
|
328 | 328 |
function label = createLabel(parent, pos, labelText) |
329 | 329 |