<div dir="ltr"><div style><span style="font-family:arial,sans-serif;font-size:13px">Hi, </span></div><div style><font face="arial, sans-serif">Thanks a lot for your response. Here are the details for my data and the analysis, my code is exactly what I have sent in my first email. I tested Haxby data with my code and it works perfectly fine. I am also happy to send you codes with perhaps a part of data (all data is too huge).</font></div>
<div style><font face="arial, sans-serif"><br></font></div><div style><font face="arial, sans-serif">All the best,</font></div><div style><font face="arial, sans-serif">Arman</font></div><div><span style="font-family:arial,sans-serif;font-size:13px"><b><br>
</b></span></div><div><span style="font-family:arial,sans-serif;font-size:13px"><b>My version of PyMVPA</b></span><br></div><div><span style="font-family:arial,sans-serif;font-size:13px"><b><br></b></span></div><div><div>
In [59]: mvpa2.suite.versions</div><div>Out[59]: </div><div>{'ctypes': SmartVersion ('1.1.0'),</div><div> 'ipython': SmartVersion ('1.1.0'),</div><div> 'lxml': SmartVersion ('2.2.3'),</div>
<div> 'matplotlib': SmartVersion ('0.99.1.1'),</div><div> 'nibabel': SmartVersion ('1.3.0'),</div><div> 'numpy': SmartVersion ('1.4.1'),</div><div> 'reportlab': SmartVersion ('2.3'),</div>
<div> 'scipy': SmartVersion ('0.7.2'),</div><div> 'skl': SmartVersion ('0.14.1')}</div></div><div><br></div><div><br></div><div style><b>Debug RFE</b></div><div><div>[RFEC] DBG:                    Initiating RFE with training on <Dataset: 55x857366@float32, <sa: chunks,partitions,targets,time_coords,time_indices>, <fa: voxel_indices>, <a: imghdr,imgtype,lastpartitionset,lastsplit,mapper,partitions_set,repetitons,voxel_dim...> and testing using <Dataset: 55x857366@float32, <sa: chunks,partitions,targets,time_coords,time_indices>, <fa: voxel_indices>, <a: imghdr,imgtype,lastpartitionset,lastsplit,mapper,partitions_set,repetitons,voxel_dim...></div>
<div>[RFEC] DBG:                    Step 0: nfeatures=857366</div><div>---------------------------------------------------------------------------</div><div>IndexError                                Traceback (most recent call last)</div>
<div><ipython-input-63-a9da6f9cc192> in <module>()</div><div>----> 1 results=cvte(gm_lt)</div><div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in __call__(self, ds)</div><div>    257                                    "used and auto training is disabled."</div>
<div>    258                                    % str(self))</div><div>--> 259         return super(Learner, self).__call__(ds)</div><div>    260 </div><div>    261 </div><div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/base/node.pyc in __call__(self, ds)</div>
<div>    109 </div><div>    110         self._precall(ds)</div><div>--> 111         result = self._call(ds)</div><div>    112         result = self._postcall(ds, result)</div><div>    113 </div><div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/measures/base.pyc in _call(self, ds)</div>
<div>    495         # always untrain to wipe out previous stats</div><div>    496         self.untrain()</div><div>--> 497         return super(CrossValidation, self)._call(ds)</div><div>    498 </div><div>    499 </div>
<div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/measures/base.pyc in _call(self, ds)</div><div>    324                 ca.datasets.append(sds)</div><div>    325             # run the beast</div><div>--> 326             result = node(sds)</div>
<div>    327             # callback</div><div>    328             if not self._callback is None:</div><div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in __call__(self, ds)</div><div>    257                                    "used and auto training is disabled."</div>
<div>    258                                    % str(self))</div><div>--> 259         return super(Learner, self).__call__(ds)</div><div>    260 </div><div>    261 </div><div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/base/node.pyc in __call__(self, ds)</div>
<div>    109 </div><div>    110         self._precall(ds)</div><div>--> 111         result = self._call(ds)</div><div>    112         result = self._postcall(ds, result)</div><div>    113 </div><div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/measures/base.pyc in _call(self, ds)</div>
<div>    589                     for i in dstrain.get_attr(splitter.get_space())[0].unique])</div><div>    590         # ask splitter for first part</div><div>--> 591         measure.train(dstrain)</div><div>    592         # cleanup to free memory</div>
<div>    593         del dstrain</div><div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in train(self, ds)</div><div>    130             # things might have happened during pretraining</div><div>
    131             if ds.nfeatures > 0:</div><div>--> 132                 result = self._train(ds)</div><div>    133             else:</div><div>    134                 warning("Trying to train on dataset with no features present")</div>
<div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/clfs/meta.pyc in _train(self, dataset)</div><div>   1346         # XXX: should training be done using whole dataset or just samples</div><div>   1347         # YYY: in some cases labels might be needed, thus better full dataset</div>
<div>-> 1348         self.__mapper.train(dataset)</div><div>   1349 </div><div>   1350         # for train() we have to provide dataset -- not just samples to train!</div><div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in train(self, ds)</div>
<div>    130             # things might have happened during pretraining</div><div>    131             if ds.nfeatures > 0:</div><div>--> 132                 result = self._train(ds)</div><div>    133             else:</div>
<div>    134                 warning("Trying to train on dataset with no features present")</div><div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/featsel/rfe.pyc in _train(self, ds)</div><div>    246             # Compute sensitivity map</div>
<div>    247             if self.__update_sensitivity or sensitivity == None:</div><div>--> 248                 sensitivity = self._fmeasure(wdataset)</div><div>    249                 if len(sensitivity) > 1:</div>
<div>    250                     raise ValueError(</div><div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in __call__(self, ds)</div><div>    251                     debug('LRN', "Auto-training %s on %s",</div>
<div>    252                           (self, ds))</div><div>--> 253                 self.train(ds)</div><div>    254             else:</div><div>    255                 # we always have to have trained before using a learner</div>
<div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in train(self, ds)</div><div>    130             # things might have happened during pretraining</div><div>    131             if ds.nfeatures > 0:</div>
<div>--> 132                 result = self._train(ds)</div><div>    133             else:</div><div>    134                 warning("Trying to train on dataset with no features present")</div><div><br></div><div>
/usr/lib64/python2.6/site-packages/mvpa2/measures/base.pyc in _train(self, dataset)</div><div>    805                     True:  "although it was trained previously"}</div><div>    806                    [clf.trained]))</div>
<div>--> 807         return clf.train(dataset)</div><div>    808 </div><div>    809 </div><div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in train(self, ds)</div><div>    130             # things might have happened during pretraining</div>
<div>    131             if ds.nfeatures > 0:</div><div>--> 132                 result = self._train(ds)</div><div>    133             else:</div><div>    134                 warning("Trying to train on dataset with no features present")</div>
<div><br></div><div>/usr/lib64/python2.6/site-packages/mvpa2/clfs/meta.pyc in _train(self, dataset)</div><div>   1268 </div><div>   1269             if ca.is_enabled("stats"):</div><div>-> 1270                 predictions = clf.predict(split[1])</div>
<div>   1271                 self.ca.stats.add(split[1].sa[targets_sa_name].value,</div><div>   1272                                           predictions,</div><div><br></div><div>IndexError: list index out of range</div>
</div><div><br></div><div><br></div><div><span style="font-family:arial,sans-serif;font-size:13px"><b>print  MyData.summary()</b></span><br></div><div><span style="font-family:arial,sans-serif;font-size:13px"><b><br></b></span></div>
<div>In [52]: print gm_lt.summary()</div><div>Dataset: 97x857366@float32, <sa: chunks,targets,time_coords,time_indices>, <fa: voxel_indices>, <a: imghdr,imgtype,mapper,voxel_dim,voxel_eldim></div><div>stats: mean=0.201735 std=0.44915 var=0.201735 min=0 max=1</div>
<div><br></div><div>Counts of targets in each chunk:</div><div>  chunks\targets  m   n</div><div>                 --- ---</div><div>       0.0        24  18</div><div>       1.0        25  30</div><div><br></div><div>Summary for targets across chunks</div>
<div>  targets mean std min max #chunks</div><div>    m     24.5 0.5  24  25    2</div><div>    n      24   6   18  30    2</div><div><br></div><div>Summary for chunks across targets</div><div>  chunks mean std min max #targets</div>
<div>    0     21   3   18  24     2</div><div>    1    27.5 2.5  25  30     2</div><div>Sequence statistics for 97 entries from set ['m', 'n']</div><div>Counter-balance table for orders up to 2:</div><div>
Targets/Order O1     |  O2     |</div><div>      m:      47  2  |  45  4  |</div><div>      n:       1 46  |   2 44  |</div><div>Correlations: min=-0.73 max=0.92 mean=-0.01 sum(abs)=42</div></div><div class="gmail_extra">
<br><br><div class="gmail_quote">On Mon, Jan 27, 2014 at 9:14 PM, Yaroslav Halchenko <span dir="ltr"><<a href="mailto:debian@onerussian.com" target="_blank">debian@onerussian.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Arman,<br>
<br>
sorry about that -- we should figure it out since it seems to indeed<br>
match our docs and provided unit-test.<br>
<br>
FWIW -- we will beef up our development to kick out a new release some<br>
time soon, that one should include a helper class SplitRFE which would<br>
make it easier to specify a typical RFE procedure.<br>
<br>
Meanwhile -- would you be kind to let us know:<br>
- current version of used PyMVPA you use?<br>
<br>
- log output if you enable debugging for RFE:<br>
  export MVPA_DEBUG=RFE.*<br>
<br>
  or in python script<br>
<br>
  debug.active += ["RFE.*"]<br>
- details on your dataset:<br>
<br>
  print  MyData.summary()<br>
<br>
OR instead of last two:<br>
<br>
just take few non-degenerate features of it (ds = MyData[:, :20]),<br>
h5save and share with us with your code snippet (verify it runs and<br>
produces the same error on smaller ds) so we could reproduce/analyze ?<br>
<br>
Cheers!<br>
<div><div class="h5"><br>
On Mon, 27 Jan 2014, Arman Eshaghi wrote:<br>
<br>
>    Dear all,�<br>
>    I'm struggling with recursive feature selection, a meta classifier (clf),<br>
>    and the final cross validation. Below is what I have done and what I get<br>
>    as error. I would very much appreciate if you could help me here.�<br>
>    #from rfe manual<br>
>    rfe = RFE(rfesvm_split.get_sensitivity_analyzer(postproc = ChainMapper([<br>
>    FxMapper('features', l2_normed), FxMapper('samples', np.mean),<br>
>    FxMapper('samples', np.abs)])), ConfusionBasedError(rfesvm_split,<br>
>    confusion_state='stats'),<br>
>    Repeater(2), fselector=FractionTailSelector(0.50, mode = 'select', tail=<br>
>    'upper'), stopping_criterion=NBackHistoryStopCrit(BestDetector(), 10),<br>
>    train_pmeasure=False, update_sensitivity=True)<br>
>    #Meta-classifier with SVM as the final classifier and rfe as feature<br>
>    selector<br>
>    clf=FeatureSelectionClassifier(LinearCSVMC(), rfe, descr='SVM+RFE')<br>
>    #cross-validation<br>
>    cvte=CrossValidation(clf, HalfPartitioner(), enable_ca=['stats'])<br>
>    #running the analysis<br>
>    results=cvte(MyData)<br>
>    ERRORS:<br>
>    In [37]: results=cvte(gm_lt)<br>
>    ---------------------------------------------------------------------------<br>
>    IndexError � � � � � � � � � � � � � � � �Traceback (most recent call<br>
>    last)<br>
>    <ipython-input-37-a9da6f9cc192> in <module>()<br>
>    ----> 1 results=cvte(gm_lt)<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in<br>
>    __call__(self, ds)<br>
>    � � 257 � � � � � � � � � � � � � � � � � �"used and auto training is<br>
>    disabled."<br>
>    � � 258 � � � � � � � � � � � � � � � � � �% str(self))<br>
>    --> 259 � � � � return super(Learner, self).__call__(ds)<br>
>    � � 260�<br>
>    � � 261�<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/base/node.pyc in __call__(self,<br>
>    ds)<br>
>    � � 109�<br>
>    � � 110 � � � � self._precall(ds)<br>
>    --> 111 � � � � result = self._call(ds)<br>
>    � � 112 � � � � result = self._postcall(ds, result)<br>
>    � � 113�<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/measures/base.pyc in _call(self,<br>
>    ds)<br>
>    � � 495 � � � � # always untrain to wipe out previous stats<br>
>    � � 496 � � � � self.untrain()<br>
>    --> 497 � � � � return super(CrossValidation, self)._call(ds)<br>
>    � � 498�<br>
>    � � 499�<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/measures/base.pyc in _call(self,<br>
>    ds)<br>
>    � � 324 � � � � � � � � ca.datasets.append(sds)<br>
>    � � 325 � � � � � � # run the beast<br>
>    --> 326 � � � � � � result = node(sds)<br>
>    � � 327 � � � � � � # callback<br>
>    � � 328 � � � � � � if not self._callback is None:<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in<br>
>    __call__(self, ds)<br>
>    � � 257 � � � � � � � � � � � � � � � � � �"used and auto training is<br>
>    disabled."<br>
>    � � 258 � � � � � � � � � � � � � � � � � �% str(self))<br>
>    --> 259 � � � � return super(Learner, self).__call__(ds)<br>
>    � � 260�<br>
>    � � 261�<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/base/node.pyc in __call__(self,<br>
>    ds)<br>
>    � � 109�<br>
>    � � 110 � � � � self._precall(ds)<br>
>    --> 111 � � � � result = self._call(ds)<br>
>    � � 112 � � � � result = self._postcall(ds, result)<br>
>    � � 113�<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/measures/base.pyc in _call(self,<br>
>    ds)<br>
>    � � 589 � � � � � � � � � � for i in<br>
>    dstrain.get_attr(splitter.get_space())[0].unique])<br>
>    � � 590 � � � � # ask splitter for first part<br>
>    --> 591 � � � � measure.train(dstrain)<br>
>    � � 592 � � � � # cleanup to free memory<br>
>    � � 593 � � � � del dstrain<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in train(self,<br>
>    ds)<br>
>    � � 130 � � � � � � # things might have happened during pretraining<br>
>    � � 131 � � � � � � if ds.nfeatures > 0:<br>
>    --> 132 � � � � � � � � result = self._train(ds)<br>
>    � � 133 � � � � � � else:<br>
>    � � 134 � � � � � � � � warning("Trying to train on dataset with no<br>
>    features present")<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/clfs/meta.pyc in _train(self,<br>
>    dataset)<br>
>    � �1346 � � � � # XXX: should training be done using whole dataset or just<br>
>    samples<br>
>    � �1347 � � � � # YYY: in some cases labels might be needed, thus better<br>
>    full dataset<br>
>    -> 1348 � � � � self.__mapper.train(dataset)<br>
>    � �1349�<br>
>    � �1350 � � � � # for train() we have to provide dataset -- not just<br>
>    samples to train!<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in train(self,<br>
>    ds)<br>
>    � � 130 � � � � � � # things might have happened during pretraining<br>
>    � � 131 � � � � � � if ds.nfeatures > 0:<br>
>    --> 132 � � � � � � � � result = self._train(ds)<br>
>    � � 133 � � � � � � else:<br>
>    � � 134 � � � � � � � � warning("Trying to train on dataset with no<br>
>    features present")<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/featsel/rfe.pyc in _train(self,<br>
>    ds)<br>
>    � � 246 � � � � � � # Compute sensitivity map<br>
>    � � 247 � � � � � � if self.__update_sensitivity or sensitivity == None:<br>
>    --> 248 � � � � � � � � sensitivity = self._fmeasure(wdataset)<br>
>    � � 249 � � � � � � � � if len(sensitivity) > 1:<br>
>    � � 250 � � � � � � � � � � raise ValueError(<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in<br>
>    __call__(self, ds)<br>
>    � � 251 � � � � � � � � � � debug('LRN', "Auto-training %s on %s",<br>
>    � � 252 � � � � � � � � � � � � � (self, ds))<br>
>    --> 253 � � � � � � � � self.train(ds)<br>
>    � � 254 � � � � � � else:<br>
>    � � 255 � � � � � � � � # we always have to have trained before using a<br>
>    learner<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in train(self,<br>
>    ds)<br>
>    � � 130 � � � � � � # things might have happened during pretraining<br>
>    � � 131 � � � � � � if ds.nfeatures > 0:<br>
>    --> 132 � � � � � � � � result = self._train(ds)<br>
>    � � 133 � � � � � � else:<br>
>    � � 134 � � � � � � � � warning("Trying to train on dataset with no<br>
>    features present")<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/measures/base.pyc in _train(self,<br>
>    dataset)<br>
>    � � 805 � � � � � � � � � � True: �"although it was trained previously"}<br>
>    � � 806 � � � � � � � � � �[clf.trained]))<br>
>    --> 807 � � � � return clf.train(dataset)<br>
>    � � 808�<br>
>    � � 809�<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/base/learner.pyc in train(self,<br>
>    ds)<br>
>    � � 130 � � � � � � # things might have happened during pretraining<br>
>    � � 131 � � � � � � if ds.nfeatures > 0:<br>
>    --> 132 � � � � � � � � result = self._train(ds)<br>
>    � � 133 � � � � � � else:<br>
>    � � 134 � � � � � � � � warning("Trying to train on dataset with no<br>
>    features present")<br>
>    /usr/lib64/python2.6/site-packages/mvpa2/clfs/meta.pyc in _train(self,<br>
>    dataset)<br>
>    � �1268�<br>
>    � �1269 � � � � � � if ca.is_enabled("stats"):<br>
>    -> 1270 � � � � � � � � predictions = clf.predict(split[1])<br>
>    � �1271 � � � � � � � �<br>
>    self.ca.stats.add(split[1].sa[targets_sa_name].value,<br>
>    � �1272 � � � � � � � � � � � � � � � � � � � � � predictions,<br>
>    IndexError: list index out of range<br>
<br>
</div></div>> _______________________________________________<br>
> Pkg-ExpPsy-PyMVPA mailing list<br>
> <a href="mailto:Pkg-ExpPsy-PyMVPA@lists.alioth.debian.org">Pkg-ExpPsy-PyMVPA@lists.alioth.debian.org</a><br>
> <a href="http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-exppsy-pymvpa" target="_blank">http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-exppsy-pymvpa</a><br>
<span class="HOEnZb"><font color="#888888"><br>
<br>
--<br>
Yaroslav O. Halchenko, Ph.D.<br>
<a href="http://neuro.debian.net" target="_blank">http://neuro.debian.net</a> <a href="http://www.pymvpa.org" target="_blank">http://www.pymvpa.org</a> <a href="http://www.fail2ban.org" target="_blank">http://www.fail2ban.org</a><br>

Senior Research Associate,     Psychological and Brain Sciences Dept.<br>
Dartmouth College, 419 Moore Hall, Hinman Box 6207, Hanover, NH 03755<br>
Phone: <a href="tel:%2B1%20%28603%29%20646-9834" value="+16036469834">+1 (603) 646-9834</a>                       Fax: <a href="tel:%2B1%20%28603%29%20646-1419" value="+16036461419">+1 (603) 646-1419</a><br>
WWW:   <a href="http://www.linkedin.com/in/yarik" target="_blank">http://www.linkedin.com/in/yarik</a><br>
<br>
_______________________________________________<br>
Pkg-ExpPsy-PyMVPA mailing list<br>
<a href="mailto:Pkg-ExpPsy-PyMVPA@lists.alioth.debian.org">Pkg-ExpPsy-PyMVPA@lists.alioth.debian.org</a><br>
<a href="http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-exppsy-pymvpa" target="_blank">http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-exppsy-pymvpa</a></font></span></blockquote></div><br></div>