Esiste un modo integrato per eseguire la selezione delle funzioni di forza bruta in scikit-learn? Cioè Esamina in modo esauriente tutte le possibili combinazioni delle funzionalità di input, quindi trova il sottoinsieme migliore. Ho familiarità con la classe "Eliminazione caratteristica ricorsiva" ma sono particolarmente interessante nel valutare tutte le possibili combinazioni delle caratteristiche di input una dopo l'altra.Presenta in modo completo la selezione in scikit-learn?
risposta
No, la migliore selezione di sottoinsiemi non è implementata. Il modo più semplice per farlo è scriverlo da solo. Questo dovrebbe iniziare:
from itertools import chain, combinations
from sklearn.cross_validation import cross_val_score
def best_subset_cv(estimator, X, y, cv=3):
n_features = X.shape[1]
subsets = chain.from_iterable(combinations(xrange(k), k + 1)
for k in xrange(n_features))
best_score = -np.inf
best_subset = None
for subset in subsets:
score = cross_val_score(estimator, X[:, subset], y, cv=cv).mean()
if score > best_score:
best_score, best_subset = score, subset
return best_subset, best_score
Esegue k fold convalida incrociata all'interno del ciclo, in modo che si adatti k ᵖ stimatori quando dare dati con p caratteristiche.
Grazie per la tua risposta !! – Dov
C'è un errore nel codice. Dovrebbe essere 'combinazioni (xrange (n_features))'. – nopper
Suggerimento per le prestazioni: quando si confrontano modelli diversi della stessa dimensione k, non è necessario eseguire cv: è sufficiente confrontare una statistica del treno come R^2. È necessario solo confrontare i migliori candidati di diverse dimensioni cv. Vedi il capitolo 6 in questo eccellente libro: http://www-bcf.usc.edu/~gareth/ISL/ – ihadanny
Se si sta eseguendo questo codice in Python 3 xrange()
è stato rinominato in range()
.
Qualcosa come la selezione di funzionalità avide? –
@AbhishekThakur Grazie. ma No, voglio una "stupida" selezione di funzionalità a forza bruta - in realtà posso farlo in un ciclo su tutte le combinazioni. Ma preferire un metodo/pipeline integrato se esiste? – Dov