17
class sklearn.ensemble.RandomForestClassifier(n_estimators=10, criterion='gini', max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features='auto', max_leaf_nodes=None, bootstrap=True, oob_score=False, n_jobs=1, random_state=None, verbose=0, warm_start=False, class_weight=None) 

Sto utilizzando un modello di foresta casuale con 9 campioni e circa 7000 attributi. Di questi campioni, ci sono 3 categorie che il mio classificatore riconosce.Come sintonizzare i parametri in Random Forest, utilizzando Scikit Learn?

So che questo è lontano dalle condizioni ideali, ma sto cercando di capire quali attributi sono i più importanti nelle previsioni delle funzionalità. Quali parametri sarebbe il migliore da ottimizzare per ottimizzare l'importanza della funzione?

Ho provato diverso n_estimators e ho notato che la quantità di "caratteristiche significative" (vale a dire valori diversi da zero nell'array feature_importances_) aumentava notevolmente.

Ho letto la documentazione, ma se qualcuno ha esperienza in questo, vorrei sapere quali parametri sono i migliori per sintonizzarsi e una breve spiegazione per quale motivo.

risposta

28

Dalla mia esperienza, ci sono tre caratteristiche vale la pena esplorare con la RandomForestClassifier sklearn, in ordine di importanza:

  • n_estimators

  • max_features

  • criterion

n_estimators non vale davvero la pena di ottimizzare. Più stimatori gli dai, meglio sarà. 500 o 1000 è di solito sufficiente.

max_features vale la pena esplorare per molti valori diversi. Potrebbe avere un grande impatto sul comportamento della RF perché decide quante funzioni ogni albero nella RF considera in ogni divisione.

criterion potrebbe avere un impatto ridotto, ma in genere il valore predefinito è corretto. Se hai tempo, provalo.

Assicurarsi di utilizzare lo sklearn GridSearch (preferibilmente GridSearchCV, ma le dimensioni del set di dati sono troppo piccole) quando si provano questi parametri.

Se ho capito bene la tua domanda, però, hai solo 9 campioni e 3 classi? Presumibilmente 3 campioni per classe? È molto, molto probabile che la tua RF si alleni con quella piccola quantità di dati, a meno che non siano buoni, documenti rappresentativi.

+0

grazie mille! quello che stavo facendo era istanziare iterativamente un modello, prendendo gli attributi non-zero dell'array "feature_importances_", aggiungendoli a un contatore, prendendo quelli più popolari. È un modo ingenuo? Dovrei basarlo più su variabile importanza. –

11

Le parti cruciali sono di solito tre elementi:

  • numero di estimatori - ususally più grande foresta al meglio, c'è piccola possibilità di sovradattamento qui
  • profondità massima di ogni albero (di default nessuno, portando a albero completo) - riduzione della profondità massima aiuta a combattere con il sovralimentazione
  • max caratteristiche per divisione (predefinito sqrt (d)) - si potrebbe giocare un po 'perché altera in modo significativo il comportamento dell'intero albero. sqrt euristica è di solito un buon punto di partenza, ma un luogo reale dolce potrebbe essere da qualche altra parte
+0

Ciao, potresti dirmi in che modo il numero di funzioni ha effetto sulla varianza e sul sovradattamento? – Austin

1

This l'articolo meraviglioso ha una spiegazione dettagliata dei parametri sintonizzabili, come tracciare il bilanciamento tra prestazioni e velocità, alcuni suggerimenti pratici e come eseguire la ricerca in rete.

+0

Bello grazie per questo! –

0

n_estimators è buono come altri hanno detto. È anche bravo a gestire il sovradattamento quando lo si aumenta.

Ma penso che min_sample_split sia anche utile quando si ha a che fare con l'overfitting in un dataset di piccoli campioni ma di grandi dimensioni.