Foresta casuale - Come gestire l'overfitting


41

Ho una preparazione informatica ma sto cercando di insegnarmi la scienza dei dati risolvendo problemi su Internet.

Ho lavorato su questo problema per le ultime due settimane (circa 900 righe e 10 funzioni). Inizialmente stavo usando la regressione logistica, ma ora sono passato a foreste casuali. Quando eseguo il mio modello di foresta casuale sui miei dati di allenamento ottengo valori molto alti per auc (> 99%). Tuttavia, quando eseguo lo stesso modello sui dati del test, i risultati non sono così buoni (precisione di circa il 77%). Questo mi porta a credere che sto adattando troppo i dati di allenamento.

Quali sono le migliori pratiche in materia di prevenzione di un adattamento eccessivo nelle foreste casuali?

Sto usando r e rstudio come il mio ambiente di sviluppo. Sto usando il randomForestpacchetto e ho accettato le impostazioni predefinite per tutti i parametri


4
Breiman afferma che RF non si adatta in modo eccessivo. stat.berkeley.edu/~breiman/RandomForests/cc_home.htm Partendo dal presupposto che sia corretto, forse c'è una sorta di incoerenza tra il tuo allenamento e il set di test?
Sycorax dice di reintegrare Monica il

La RF evita l'adattamento ai DATI DI PROVA se si ottimizza il parametro di ottimizzazione
Brash Equilibrium

Trovo sampsize un parametro di tuning completamente trascurato. stackoverflow.com/questions/34997134/...
Soren Havelund Welling

Risposte:


30

Per evitare un adattamento eccessivo nella foresta casuale, la cosa principale che devi fare è ottimizzare un parametro di ottimizzazione che regola il numero di caratteristiche che sono state scelte casualmente per far crescere ciascun albero dai dati avviati. In genere, lo fai tramite -fold cross-validation, dove e scegli il parametro di ottimizzazione che minimizza l'errore di previsione del campione di prova. Inoltre, la crescita di una foresta più grande migliorerà la precisione predittiva, anche se di solito ci sono rendimenti decrescenti una volta che si arriva a diverse centinaia di alberi.KK{5,10}


1
Grazie. Esiste un tutorial che mostra come ottimizzare questi parametri?
Abhi,

Dovrai iscriverti ai corsi online di Stanford, il che è piuttosto semplice, ma ecco un tutorial video per farlo in R: class.stanford.edu/courses/HumanitiesScience/StatLearning/…
Brash Equilibrium

Se lo capisco correttamente, utilizziamo la convalida incrociata per accertare il numero di funzioni che entrano nel modello di foresta casuale rispetto al numero di caratteristiche che il modello proverà in ogni fase. Corretta ?
Abhi,

4
Direi contro questa risposta: due delle caratteristiche interessanti delle RF sono che è difficile adattarle eccessivamente e i parametri di default sono generalmente abbastanza buoni. Questa risposta sembra implicare che le RF sono sensibili alle impostazioni predefinite, cosa che raramente accade
charles,

7
Dal punto di vista empirico, non ho trovato affatto difficile sovralimentare la foresta casuale, la foresta casuale guidata, la foresta casuale regolarizzata o la foresta casuale regolarizzata guidata. Funzionano regolarmente molto bene nella validazione incrociata, ma scarsamente se usati con nuovi dati a causa di un eccesso di adattamento. Credo che abbia a che fare con il tipo di fenomeno modellato. Non è un grosso problema quando si modella un processo meccanico, ma con qualcosa come un modello comportamentale ottengo risultati molto più stabili con una regressione ben specificata.
Hack-R

33

Come stai ottenendo quell'AUC del 99% sui tuoi dati di allenamento? Sii consapevole che c'è una differenza tra

predict(model)

e

predict(model, newdata=train)

quando si ottengono previsioni per il set di dati di allenamento. La prima opzione ottiene le previsioni out-of-bag dalla foresta casuale. Questo è generalmente ciò che si desidera, quando si confrontano i valori previsti con i valori effettivi sui dati di allenamento.

Il secondo tratta i dati di allenamento come se si trattasse di un nuovo set di dati e esegue le osservazioni su ciascun albero. Ciò si tradurrà in una correlazione artificialmente stretta tra le previsioni e gli effettivi, poiché l'algoritmo RF generalmente non pota i singoli alberi, basandosi invece sull'insieme di alberi per controllare il sovradimensionamento. Quindi non farlo se si desidera ottenere previsioni sui dati di allenamento.


3
Stavo usando predict (modello, data = train). Sono ora passato a predire (modello) e il mio auc è sceso all'87%. È una cosa buona o cattiva?
Abhi,

2
Grazie! Ho scoperto che questo era il problema anche per me. Ho pubblicato una domanda di follow-up su quale misura usare come "errore di addestramento" per i modelli RF qui: stats.stackexchange.com/questions/162353/…
Berk U.

Ottimo grazie!! Stavo facendo anche questo errore! A @Abhi: è una buona cosa, perché la precedente AUC era senza senso alta. Questo è più realistico. Prova la convalida incrociata e misura l'AUC su questo e probabilmente vedrai un valore simile.
Curioso il

7

Per gli alberi decisionali ci sono due modi per gestire l'overfitting: (a) non far crescere gli alberi nella loro interezza (b) potare

Lo stesso vale per una foresta di alberi: non farli crescere troppo e potare.

Non uso randomForestmolto, ma per quanto ne so, ci sono diversi parametri che puoi usare per mettere a punto le tue foreste:

  • nodesize - dimensione minima dei nodi terminali
  • maxnodes - numero massimo di nodi terminali
  • mtry - numero di variabili utilizzate per costruire ogni albero (grazie @ user777)

1
E mtry, il numero di variabili che l'algoritmo disegna per costruire ogni albero, per impostazione predefinita la radice quadrata del numero totale di funzioni.
Sycorax dice di reintegrare Monica il

Lascerei invece i maxnodi e le dimensioni di campionamento inferiori. Entrambi maxnodes decresing e alberi give sampsize con meno profondità e una foresta più robusto, sampsize correlazione albero comunque inferiore anche, e la foresta probabilmente convergeranno ad abbassare l'errore di cross-validati previsione, vedere stackoverflow.com/questions/34997134/...
Soren Havelund Welling,

2

È possibile che si desideri utilizzare metodi di convalida incrociata, come K convalida incrociata.


hai bisogno di normalizzare / ridimensionare le funzionalità?
charles,

4
@charles le mie scuse. Non è infatti necessario ridimensionare le funzionalità nell'uso di foreste casuali. Vedi: stackoverflow.com/questions/8961586/…
Fre

Penso che la convalida incrociata sarebbe utile. Questo è un set di dati relativamente piccolo con la convalida del campione diviso che potenzialmente produce stime instabili di errore (anche se, certamente, ho la sensazione che non sia questo il problema qui)
Charles

1

puoi mettere a punto i tuoi parametri usando gridsearch

from sklearn.ensemble import RandomForestClassifier

from sklearn.grid_search import GridSearchCV

random_classifier = RandomForestClassifier()

parameters = { 'max_features':np.arange(5,10),'n_estimators':[500],'min_samples_leaf': [10,50,100,200,500]}

random_grid = GridSearchCV(random_classifier, parameters, cv = 5)

Un tentato editor suggerisce che il modulo GridSearchCVsia chiamato model_selectione quindi che dovrebbe essere la seconda riga di codice from sklearn.model_selection import GridSearchCV.
gung - Ripristina Monica

0

Prova a mettere a punto il parametro max_depth in intervalli di [5, 15], ma non più di questo perché se prendi una grande profondità c'è un'alta probabilità di overfitting.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.