Número mínimo de árvores para o classificador Random Forest


8

Estou procurando uma estimativa teórica ou experimental do limite inferior para o número de árvores em um classificador Random Forest.

Normalmente testo combinações diferentes e seleciono aquela que (usando a validação cruzada) fornece o melhor resultado mediano.

No entanto, penso que pode haver um limite no número de árvores para utilização inferior, dado observações e características, para reduzir a contribuição variância para o erro. Existe algum teste ou referência que eu possa verificar para ajustar corretamente meu classificador?mn


3
Eu duvido. Mas uma sugestão: a área de aprendizado de máquina que estuda o desempenho no aprendizado de máquina é chamada de minimização empírica de riscos . Você pode tentar adicionar essas palavras-chave às suas pesquisas.
Ricardo Cruz

Respostas:


7

Esta não é necessariamente uma resposta para sua pergunta. Apenas pensamentos gerais sobre a validação cruzada do número de árvores de decisão em uma floresta aleatória.

Vejo muitas pessoas no kaggle e na stackexchange validando cruzadamente o número de árvores em uma floresta aleatória. Também perguntei a alguns colegas e eles me disseram que é importante validá-los de forma cruzada para evitar ajustes excessivos.

Isso nunca fez sentido para mim. Como cada árvore de decisão é treinada de forma independente, a adição de mais árvores de decisão deve tornar seu conjunto cada vez mais robusto.

(Isso é diferente das árvores de aumento de gradiente, que são um caso particular de aumento de ada e, portanto, há potencial de sobreajuste, pois cada árvore de decisão é treinada para ponderar os resíduos com mais força.)

Eu fiz um experimento simples:

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()

desempenho

Não estou dizendo que você está cometendo essa falácia de pensar que mais árvores podem causar super ajuste. Você claramente não o é desde que pediu um limite inferior. Isso é apenas algo que me incomoda há algum tempo, e acho importante ter em mente.

(Adendo: Elements of Statistical Learning discute isso na página 596, e concorda comigo comigo. «É certamente verdade que o aumento de B [B = número de árvores] não faz com que a sequência aleatória da floresta se ajuste demais». O autor faz a observação de que "esse limite pode superestimar os dados". Em outras palavras, como outros hiperparâmetros podem levar ao super ajuste, a criação de um modelo robusto não o resgata do super ajuste. Você deve prestar atenção ao validar cruzadamente seus outros hiper parâmetros. )

Para responder sua pergunta, adicionar árvores de decisão sempre será benéfico para o seu conjunto. Sempre o tornará cada vez mais robusto. Mas, é claro, é duvidoso que a redução marginal de 0,00000001 na variância valha o tempo computacional.

Sua pergunta, portanto, como eu entendo, é se você pode, de alguma forma, calcular ou estimar a quantidade de árvores de decisão para reduzir a variação do erro abaixo de um determinado limite.

Eu duvido muito. Não temos respostas claras para muitas perguntas amplas na mineração de dados, muito menos para perguntas específicas como essa. Como escreveu Leo Breiman (o autor de florestas aleatórias), existem duas culturas na modelagem estatística , e florestas aleatórias são o tipo de modelo que ele diz ter poucas suposições, mas também é muito específico para os dados. É por isso que, diz ele, não podemos recorrer a testes de hipóteses, precisamos seguir a validação cruzada de força bruta.


Pensei que aumentar o número de árvores levaria a um aumento do componente de viés do erro (que é de alguma forma contrabalançado por uma variação decrescente do modelo).
GC5

1
Eu sempre pensei que a adição de árvores nunca faria mal, mas na página 596 de The Elements of Statistical Learning , eles afirmam que uma floresta muito rica pode introduzir variabilidade extra, então acho que sua resposta ainda está correta, mas com um pequeno grão de sal: )
TBSRounder

1
@TBSRounder Obrigado pelo link. O autor está discutindo muitas coisas em um texto tão curto, por isso é difícil destilá-lo, especialmente confuso porque ele fala sobre a profundidade e o número de árvores ao mesmo tempo. Mas, com relação a B (= # árvores), ele está dizendo que mais árvores aproximam o modelo resultante da árvore média e, é claro, a árvore média pode ser tendenciosa, portanto, você pode acabar com um modelo tendencioso. Eu nunca reivindiquei o contrário. Eu apenas disse que B, por si só, não aumenta o viés. Isso apenas torna seu modelo mais robusto (= reduz a variação).
Ricardo Cruz

Ah sim, foi um pouco confuso, obrigado pelo esclarecimento. Por alguma razão, pensei que o autor estivesse falando sobre B, não sobre a profundidade das árvores.
precisa saber é o seguinte
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.