Numero minimo di alberi per il classificatore Foresta casuale


8

Sto cercando una stima teorica o sperimentale del limite inferiore per il numero di alberi in un classificatore Foresta casuale.

Di solito collaudo diverse combinazioni e seleziono quella che (usando la validazione incrociata) fornisce il miglior risultato mediano.

Tuttavia, penso che potrebbe esserci un limite inferiore al numero di alberi da usare, dato m osservazioni e nfunzionalità, per ridurre il contributo della varianza all'errore. Esistono test o riferimenti che posso verificare per ottimizzare correttamente il mio classificatore?


3
Ne dubito. Ma un suggerimento: l'area dell'apprendimento automatico che studia le prestazioni nell'apprendimento automatico è chiamata minimizzazione del rischio empirico . Puoi provare ad aggiungere quelle parole chiave alle tue ricerche.
Ricardo Cruz,

Risposte:


7

Questa non è necessariamente una risposta alla tua domanda. Solo pensieri generali sulla convalida incrociata del numero di alberi decisionali all'interno di una foresta casuale.

Vedo molte persone in kaggle e stackexchange convalidare il numero di alberi in una foresta casuale. Ho anche chiesto a un paio di colleghi e mi hanno detto che è importante convalidarli in modo incrociato per evitare un eccesso di adattamento.

Questo non ha mai avuto senso per me. Poiché ogni albero decisionale viene addestrato in modo indipendente, l'aggiunta di più alberi decisionali dovrebbe rendere il tuo gruppo sempre più robusto.

(Ciò è diverso dagli alberi con incremento gradiente, che sono un caso particolare di potenziamento degli ada, e quindi esiste un potenziale di sovradimensionamento poiché ogni albero decisionale è addestrato per pesare i residui più pesantemente.)

Ho fatto un semplice esperimento:

from sklearn.datasets import load_digits
from sklearn.ensemble import RandomForestClassifier
from sklearn.grid_search import GridSearchCV
import numpy as np
import matplotlib.pyplot as plt
plt.ioff()

df = load_digits()
X = df['data']
y = df['target']

cv = GridSearchCV(
    RandomForestClassifier(max_depth=4),
    {'n_estimators': np.linspace(10, 1000, 20, dtype=int)},
    'accuracy',
    n_jobs=-1,
    refit=False,
    cv=50,
    verbose=1)
cv.fit(X, y)
scores = np.asarray([s[1] for s in cv.grid_scores_])
trees = np.asarray([s[0]['n_estimators'] for s in cv.grid_scores_])
o = np.argsort(trees)
scores = scores[o]
trees = trees[o]
plt.clf()
plt.plot(trees, scores)
plt.xlabel('n_estimators')
plt.ylabel('accuracy')
plt.savefig('trees.png')
plt.show()

prestazione

Non sto dicendo che stai commettendo questo errore nel pensare che più alberi possano causare un eccesso di adattamento. Chiaramente non lo sei poiché hai chiesto un limite inferiore. Questo è solo qualcosa che mi ha infastidito per un po 'e penso che sia importante tenere a mente.

(Addendum: Elements of Statistical Learning discute di questo a pagina 596, ed è d'accordo su questo con me. «È certamente vero che l'aumento di B [B = numero di alberi] non causa un eccesso di sequenza casuale delle foreste». L'autore fa l'osservazione che «questo limite può sovrautilizzare i dati». In altre parole, poiché altri iperparametri possono portare a un eccesso di adattamento, la creazione di un modello robusto non ti salva dall'eccessivo equipaggiamento. )

Per rispondere alla tua domanda, l'aggiunta di alberi decisionali sarà sempre utile per il tuo gruppo. Lo renderà sempre più robusto. Ma, naturalmente, è dubbio se la riduzione marginale di 0,00000001 nella varianza valga il tempo di calcolo.

La tua domanda quindi, come ho capito, è se puoi in qualche modo calcolare o stimare la quantità di alberi decisionali per ridurre la varianza dell'errore al di sotto di una certa soglia.

Ne dubito moltissimo. Non abbiamo risposte chiare a molte domande di ampia portata nel data mining, domande molto meno specifiche come questa. Come ha scritto Leo Breiman (l'autore di foreste casuali), ci sono due culture nella modellistica statistica , e le foreste casuali sono il tipo di modello che dice ha pochi presupposti, ma è anche molto specifico per i dati. Ecco perché, dice, non possiamo ricorrere al test delle ipotesi, dobbiamo procedere con la validazione incrociata della forza bruta.


Mh, ho pensato che l'aumento del numero di alberi avrebbe comportato un aumento della componente di errore dell'errore (che è in qualche modo controbilanciato da una varianza decrescente del modello).
gc5,

1
Ho sempre pensato che l'aggiunta di alberi non potesse mai far male, ma in The Elements of Statistical Learning pagina 596, affermano che una foresta troppo ricca può introdurre una maggiore variabilità, quindi penso che la tua risposta sia ancora corretta, ma con un piccolo granello di sale: )
TBSRounder

1
@TBSRounder Grazie per il link. L'autore sta discutendo troppe cose in un così breve pezzo di testo, quindi è difficile distillarlo, soprattutto confuso perché parla della profondità e del numero di alberi allo stesso tempo. Ma, per quanto riguarda B (= # alberi), sta dicendo che più alberi avvicinano il modello risultante all'albero medio e, ovviamente, l'albero medio può essere distorto, quindi potresti finire con un modello distorto. Non ho mai preteso diversamente. Ho appena detto che B, di per sé, non aumenta il pregiudizio. Rende solo il tuo modello più robusto (= riduce la varianza).
Ricardo Cruz,

Ah sì, è stato un po 'confuso, grazie per il chiarimento. Per qualche ragione ho pensato che l'autore stesse parlando di B, non della profondità dell'albero.
TBSRounder
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.