[pymvpa] Recursive Feature Elimination errors

Mike E. Klein michaeleklein at gmail.com
Sat Oct 8 17:35:06 UTC 2011


Hi,

Just wondering if anyone had any advice on this… I'm pretty hopelessly stuck
and would love to be able to do this RFE-based analysis.

Best,
Mike

On Fri, Sep 16, 2011 at 6:30 PM, Mike E. Klein <michaeleklein at gmail.com>wrote:

> Hi all,
>
> I'm trying to get a very "basic" script working that implements RFE. I'm
> not a coder, but I've read the tutorial and am trying to follow others'
> scripts as best as possible. Generally, I hope to do small modifications of
> standard scripts (changing my 4d bold data, my mask, attributes.txt file,
> and label names).
>
> I tried using the code at http://www.pymvpa.org/featsel.html, but got the
> errors mentioned here (
> http://lists.alioth.debian.org/pipermail/pkg-exppsy-pymvpa/2011q2/001747.html),
> as I'm running v0.6. (I must also mention that the 0.4, 0.6 (with multiple
> RCs), and coming 2.0 naming has been fairly difficult to navigate.)
>
> Anyway, I followed that thread's advice and changed the method from
> camelCase naming to incorporate underscores: that line of code now reads
> "sensitivity_analyzer=rfesvm_split.get_sensitivity_analyzer("
>
> Python is now reporting a long TypeError which I've pasted below. I've also
> attached my script. I've gotten simpler scripts (that incorporate no feature
> selection) to work, so the problem should not be with my nifti or attribute
> files.
>
> Thanks again for any and all help: I only have the manual, google, and this
> listserv to rely upon when problems arise!
>
> Best,
> Mike
>
>
> In [24]: FtSelClf = FeatureSelectionClassifier(
>    ....:     # use a linear SVM classifier:
>    ....:     clf = LinearCSVMC(),
>    ....:     # on features selected via RFE
>    ....:     feature_selection = RFE(
>    ....:         # based on sensitivity of a clf which does splitting
> internally
>    ....:
> sensitivity_analyzer=rfesvm_split.get_sensitivity_analyzer(
>    ....:             transformer=Absolute,combiner=lambda x:
> N.sum(x,axis=0)),
>    ....:         transfer_error=ConfusionBasedError(
>    ....:             rfesvm_split,
>    ....:             confusion_state="confusion"),
>    ....:         # and whose internal error we use
>    ....:         feature_selector=FractionTailSelector(
>    ....:             0.3, mode='discard', tail='lower'),
>    ....:         # remove 20% of features at each step
>    ....:         #enable_states=['feature_ids'],
>    ....:         # update sensitivity at each step
>    ....:         update_sensitivity=True),
>    ....:     enable_states=['feature_ids'],
>    ....:     descr='LinSVM+RFE(splits_avg)')
> ---------------------------------------------------------------------------
> TypeError                                 Traceback (most recent call last)
> /Users/mike/Documents/fMRI_analysis/PyMVPA-analysis/subjects/0-pemberton/<ipython-input-24-85837272a049>
> in <module>()
>       6         # based on sensitivity of a clf which does splitting
> internally
>
>       7         sensitivity_analyzer=rfesvm_split.get_sensitivity_analyzer(
> ----> 8             transformer=Absolute,combiner=lambda x:
> N.sum(x,axis=0)),
>       9         transfer_error=ConfusionBasedError(
>      10             rfesvm_split,
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/mvpa/misc/args.pyc
> in do_group_kwargs(self, *args_, **kwargs_)
>      71                 if passthrough:   kwargs__[k] = skwargs
>      72                 if assign: setattr(self, '_%s' % k, skwargs)
> ---> 73             return method(self, *args_, **kwargs__)
>      74         do_group_kwargs.func_name = method.func_name
>      75         return do_group_kwargs
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/mvpa/clfs/meta.pyc
> in get_sensitivity_analyzer(self, slave_kwargs, **kwargs)
>    1270                 self, sa_attr='splits',
>    1271
> analyzer=self.__clf.get_sensitivity_analyzer(**slave_kwargs),
> -> 1272                 **kwargs)
>    1273
>    1274     partitioner = property(fget=lambda x:x.__partitioner,
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/mvpa/misc/args.pyc
> in do_group_kwargs(self, *args_, **kwargs_)
>      71                 if passthrough:   kwargs__[k] = skwargs
>      72                 if assign: setattr(self, '_%s' % k, skwargs)
> ---> 73             return method(self, *args_, **kwargs__)
>      74         do_group_kwargs.func_name = method.func_name
>      75         return do_group_kwargs
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/mvpa/measures/base.pyc
> in __init__(self, clf, analyzer, combined_analyzer, sa_attr, slave_kwargs,
> **kwargs)
>     962           Arguments to pass to created analyzer if analyzer is None
>     963         """
> --> 964         Sensitivity.__init__(self, clf, **kwargs)
>     965         if combined_analyzer is None:
>     966             # sanitarize kwargs
>
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/mvpa/measures/base.pyc
> in __init__(self, clf, force_train, **kwargs)
>     756         # by default auto train
>
>     757         kwargs['auto_train'] = kwargs.get('auto_train', True)
> --> 758         FeaturewiseMeasure.__init__(self, force_train=force_train,
> **kwargs)
>     759
>     760         _LEGAL_CLFS = self._LEGAL_CLFS
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/mvpa/measures/base.pyc
> in __init__(self, **kwargs)
>     615
>     616     def __init__(self, **kwargs):
> --> 617         Measure.__init__(self, **kwargs)
>     618
>     619
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/mvpa/measures/base.pyc
> in __init__(self, null_dist, **kwargs)
>      85           certain value of the computed measure.
>      86         """
> ---> 87         Learner.__init__(self, **kwargs)
>      88
>      89         null_dist_ = auto_null_dist(null_dist)
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/mvpa/base/learner.pyc
> in __init__(self, auto_train, force_train, **kwargs)
>      76           All arguments are passed to the baseclass.
>      77         """
> ---> 78         Node.__init__(self, **kwargs)
>      79         self.__is_trained = False
>      80         self.__auto_train = auto_train
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/mvpa/base/node.pyc
> in __init__(self, space, postproc, **kwargs)
>      52           result dataset. If None, nothing is done.
>      53         """
> ---> 54         ClassWithCollections.__init__(self, **kwargs)
>      55         self.set_space(space)
>      56         self.set_postproc(postproc)
>
> /Library/Frameworks/EPD64.framework/Versions/7.1/lib/python2.7/site-packages/mvpa/base/state.pyc
> in __init__(self, descr, **kwargs)
>     855                           "Unexpected keyword argument %s=%s for
> %s." \
>     856                            % (arg, argument, self) \
> --> 857                           + " Valid parameters are %s" %
> known_params
>     858
>     859             ## Initialize other base classes
>
>
> TypeError: Unexpected keyword argument transformer=<function Absolute at
> 0x1098665f0> for <BoostedClassifierSensitivityAnalyzer>. Valid parameters
> are ['base_sensitivities', 'raw_results', 'calling_time', 'training_time',
> 'null_t', 'null_prob']
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.alioth.debian.org/pipermail/pkg-exppsy-pymvpa/attachments/20111008/ee623dd0/attachment.html>


More information about the Pkg-ExpPsy-PyMVPA mailing list