Dear all, Suppose I have two conditions, n runs with m trial and each trial is composed by t volumes (frames). I would like to do a time-wise (time-resolved) decoding to have the decoding accuracy curve for each time frame. I saw several approaches to do this: 1) the first is to train the classifier using t datasets one for each time frame using volumes belonging to the same time frame thus I will have t accuracies 2) the second is to train the classifier using the within-trial averaged dataset (mean of t frames) and then test using each time-frame so having also t accuracies.
Q1: Which approach will you use? Are there other approaches? I would like to implement the second one in PyMVPA, so that the classifier needs to average in the training step on the training chunk of the dataset. I made a little test extending LinearCSVM class overriding the _train function: def _train(self, ds): avg_mapper = mean_group_sample(['trial']) # I build my ds with this attr ds = ds.get_mapped(avg_mapper) return LinearCSVMC._train(self, ds) Moreover I implemented an error class to compute time wise test error, to be passed to the CrossValidation: class ErrorPerTrial(BinaryFxNode): def _call(self, ds): [...same code of the parent class...] err = [self.fx(values[ds.sa.frame == i], targets[ds.sa.frame == i]) for i in np.unique(ds.sa.frame)] # I compute a list of fx values I think that maybe the ErrorPerTrial class is almost good (but if you have a more elegant solution is well-accepted :)), while extending every classifier is the worst solution, maybe a decorator or a wrapper is a possible solution. Q2: How to implement this (if not yet implemented in pymvpa)? Could be a solution build an TrialAverager class that extends Learner with a classifier as input parameter and perform averaging? Sorry for the tricky and long post. Thank you, Roberto
_______________________________________________ Pkg-ExpPsy-PyMVPA mailing list Pkg-ExpPsy-PyMVPA@lists.alioth.debian.org http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-exppsy-pymvpa