[pymvpa] Sensitivity map with RFE?

marco tettamanti tettamanti.marco at hsr.it
Fri Jul 12 13:13:07 UTC 2013


Dear Roberto,
thank you very much for your reply!
I have tried adding a line as you suggested, but nothing changed.

Actually, I thought from the PyMVPA manual that it is the 
'RepeatedMeasure(sensanasvm, NFoldPartitioner())' that takes care of the 
cross-validation.

I have now tried modifying my code to make it more more similar to the example 
in the RFE help documentation, with two different outcomes:

1) The following is basically equivalent to the snippet I sent previously and, 
at least in my intentions, modelled upon the sensitivity analysis with feature 
selection.
With this, I still get the error message "RuntimeError: Cannot reverse-map data 
since the original data shape is unknown. Either set `dshape` in the 
constructor, or call train()."

#-----------------------------
clfsvm = SplitClassifier(LinearCSVMC(), NFoldPartitioner())

rfesvm = RFE(clfsvm.get_sensitivity_analyzer(postproc=maxofabs_sample()), 
ConfusionBasedError(clfsvm, confusion_state='stats'), Repeater(2), 
fselector=FractionTailSelector(0.30, mode='select', tail='upper'), 
stopping_criterion=NBackHistoryStopCrit(BestDetector(), 10), 
train_pmeasure=False, update_sensitivity=True)

fclfsvm = FeatureSelectionClassifier(clfsvm, rfesvm)

sensanasvm = fclfsvm.get_sensitivity_analyzer(postproc=maxofabs_sample())

cv_sensana_svm = RepeatedMeasure(sensanasvm, NFoldPartitioner())

senssvm = cv_sensana_svm(fds)

print senssvm.shape
#-----------------------------


2) I have also tried a different solution, which however I do not think that is 
suited to produce a sensitivity map. The following does not yield any errors and 
produces the correct map dimensionality. However, not suprisingly, the result 
does not make any sense, as I get a uniform value spread across all brain mask 
voxels.

#-----------------------------
clfsvm = SplitClassifier(LinearCSVMC(), NFoldPartitioner())

rfesvm = RFE(clfsvm.get_sensitivity_analyzer(postproc=maxofabs_sample()), 
ConfusionBasedError(clfsvm, confusion_state='stats'), Repeater(2), 
fselector=FractionTailSelector(0.30, mode='select', tail='upper'), 
stopping_criterion=NBackHistoryStopCrit(BestDetector(), 10), 
train_pmeasure=False, update_sensitivity=True)

fclfsvm = FeatureSelectionClassifier(clfsvm, rfesvm)

cvtesvm = CrossValidation(fclfsvm, NFoldPartitioner(), errorfx=lambda p, 
t:np.mean(p == t), postproc=maxofabs_sample(), enable_ca=['confusion', 'stats'])

cv_sensana_svm = RepeatedMeasure(cvtesvm, NFoldPartitioner())

senssvm = cv_sensana_svm(fds)
#-----------------------------



Thank you all and very best wishes,
Marco

> Date: Fri, 12 Jul 2013 11:36:21 +0200
> From: Roberto Guidotti<robbenson18 at gmail.com>
> To: Development and support of PyMVPA
> 	<pkg-exppsy-pymvpa at lists.alioth.debian.org>
> Subject: Re: [pymvpa] Sensitivity map with RFE?
> Message-ID:
> 	<CAGj93cHSQy-SqXE7H7YwP4tGnCEvBHW7ypSX8ENNF6FWLrk_jQ at mail.gmail.com>
> Content-Type: text/plain; charset="iso-8859-1"
>
> Dear Marco,
>
>> From your snippet I notice that you get the sensitivity analyzer without
> run any CrossValidation/Classification.
>
> So try to run
> -------
> err = fclfsvm(fds) #That let you to cross validate/classify/select features
> on your dataset
> -------
> This let you to train your object and then you can get the sensitivity of
> your classifier.
>
> I've never used RFE, but this is what I get by your snippet.
>
> Ciao
> Roberto
>
>> >  Dear all,
>> >  is there any manner to obtain a sensitivity map with RFE, similar to what
>> >  can be done with feature selection?
>> >
>> >  I am trying to use the following code:
>> >
>> >  #-----------------------------**--------------------
>> >  clfsvm = LinearCSVMC()
>> >
>> >  rfesvm = RFE(clfsvm.get_sensitivity_**analyzer(postproc=maxofabs_**sample()),
>> >  CrossValidation(clfsvm, NFoldPartitioner(), errorfx=mean_mismatch_error,
>> >  postproc=mean_sample()), Repeater(2), fselector=**FractionTailSelector(0.30,
>> >  mode='select', tail='upper'), stopping_criterion=**NBackHistoryStopCrit(**BestDetector(),
>> >  10), update_sensitivity=True)
>> >
>> >  fclfsvm = FeatureSelectionClassifier(**clfsvm, rfesvm)
>> >
>> >  sensanasvm = fclfsvm.get_sensitivity_**analyzer(postproc=maxofabs_**
>> >  sample())
>> >
>> >  cv_sensana_svm = RepeatedMeasure(sensanasvm, NFoldPartitioner())
>> >
>> >  senssvm = cv_sensana_svm(fds)
>> >  #-----------------------------**--------------------
>> >
>> >  However, after a while I get the following error:
>> >
>> >  RuntimeError: Cannot reverse-map data since the original data shape is
>> >  unknown. Either set `dshape` in the constructor, or call train().
>> >
>> >
>> >  Thank you in advance for any help!
>> >  Best wishes,
>> >  Marco

-- 
Marco Tettamanti, Ph.D.
Nuclear Medicine Department & Division of Neuroscience
San Raffaele Scientific Institute
Via Olgettina 58
I-20132 Milano, Italy
Phone ++39-02-26434888
Fax ++39-02-26434892
Email: tettamanti.marco at hsr.it
Skype: mtettamanti
--------------------------------------------------------------------------
LA TUA CURA E' SCRITTA NEL TUO DNA. AL SAN RAFFAELE LA STIAMO REALIZZANDO.
AIUTA LA RICERCA, DAI IL TUO 5XMILLE - CF: 07636600962
info:www.5xmille at hsr.it - www.5xmille.org

Disclaimer added by CodeTwo Exchange Rules 2007	
http://www.codetwo.com	
	



More information about the Pkg-ExpPsy-PyMVPA mailing list