3dsvm issue


I have some questions about 3dsvm.
I am trying to run 3dsvm for classifying multi-class groups(in my case, four groups) from task-related fMRI data.

GroupA : 30 subjects
GroupB : 40 subjects
GroupC : 28 subjects
GroupD : 32 subjects

  1. To generate ‘TrainVol’(4D volume=3D beta images from each subject * # of subjects), should all ‘TrainVol’ from each group have the same size? I am wondering if each ‘TrainVol’ can have the maximum size of 28 Volumes since I have only 28 subjects for GroupC.

  2. I set testlabel as 1,2,3, and 4 for group label. But the range of 3dsvm prediction result -1.xxxx to 1.xxxx. How can I calculate accuracy or specificity?

  3. To augment data set, is it fine to make TrainVol with multiple set? For example, to make TrainVol for GroupA, I took out 5 subjects for test set. The rest of subject(25 subjects) should have been randomly ordered and I made TrainVol_GroupA_01. I took again another randomly ordered 25 subjects and I made TrainVol_GroupA_02. Finally I got 10 multiple set from TrainVol_GroupA_01 to TrainVol_GroupA_10 and I concatenated them to single 4D volume TrainVol_GroupA_Total. Is this the right way to augment data, or I don’t need to do this step?



  1. I would use the same number of subjects/training samples for each group so that chance accuracy is the same across groups. However, you can also correct for bias if you are using an unequal number of training samples across groups.

  2. The -predictions option will give you the distance to the hyperplane for each binary classifier .1D and overall muticlass class predictions (_DAG.1D or _vote.1D). Given this output and and the labels, you can calculate sensitivity and specificity for each class. We currently only report accuracy to standard out.
    Please note that the default output (binary classifiers) for -predictions is centered around 0.5 (hyperplane at 0.5), so everything > 0.5 is “class label A” and everything <= 0.5 is “class label B”, where “class label A” > “class label B”. If you want the predictions to be centered around 0, please use flag: -nopredscale. Please also note that 3dsvm was originally written for classification of temporal data and that temporal detrending of the classifier output is enabled by default. Use flag: -nodetrend to disable detreding.

  3. I would use the -censor option for this. This allows you to include/exclude subjects without having to create a new dataset for each randomization/cross-validation step.