2012-09-17 6 views
13

Questa è più una domanda "teorica". Sto lavorando con il pacchetto scikit-learn per eseguire alcuni task NLP. Sklearn fornisce molti metodi per eseguire sia la selezione delle caratteristiche che l'impostazione dei parametri del modello. Mi sto chiedendo cosa dovrei fare prima.Operazioni preliminari: selezione delle funzioni o impostazione dei parametri del modello?

Se utilizzo univariate feature selection, è abbastanza ovvio che dovrei prima selezionare la funzione e, con le funzioni selezionate, quindi ottimizzare i parametri dello stimatore.

Ma cosa succede se voglio utilizzare recursive feature elimination? Devo prima impostare i parametri con grid search utilizzando TUTTE le funzionalità originali e solo dopo eseguire la selezione delle funzioni? O forse dovrei prima selezionare le caratteristiche (con i parametri di default dello stimatore) e poi impostare i parametri con le caratteristiche selezionate?

Grazie in anticipo per qualsiasi aiuto tu possa darmi.

EDIT

sto avendo più o meno lo stesso problema dichiarato here. A quel tempo, non c'era una soluzione ad esso. Qualcuno sa se ne esiste uno adesso?

risposta

16

Personalmente ritengo che l'RFE sia eccessivo e troppo costoso nella maggior parte dei casi. Se si desidera eseguire la selezione delle funzioni su modelli lineari, utilizzare la selezione di funzioni univariate, ad esempio con i test Chi2 o L1 o L1 + L2 regolarizzati con parametro di regolarizzazione ricercato dalla griglia (generalmente denominato C o alpha nei modelli sklearn).

Per problemi fortemente non lineari con un sacco di campioni si dovrebbe provare RandomForestClassifier, ExtraTreesClassifier o GBRT modelli e la griglia cercato parametri di selezione (eventualmente utilizzando stime punteggio OOB) e usare l'interruttore compute_importances per trovare una classifica di funzioni per importanza e usalo per la selezione delle funzionalità.

Per problemi altamente non lineari con alcuni campioni, non penso ci sia una soluzione. Devi fare neuroscienze :)

+0

Grazie per il suggerimento. Dato che ho appena in programma di utilizzare LogistRegression e SVC, penso che chi2 e/o L1 sarebbero sufficienti. – feralvam