Número mínimo de árboles para el clasificador de bosque aleatorio

8

Estoy buscando una estimación teórica o experimental del límite inferior para el número de árboles en un clasificador de bosque aleatorio.

Por lo general, pruebo diferentes combinaciones y selecciono la que (mediante validación cruzada) proporciona el mejor resultado medio.

Sin embargo, creo que puede haber un límite inferior en la cantidad de árboles a usar, dadas observaciones características, para reducir la contribución de la varianza al error. ¿Hay alguna prueba o referencia que pueda verificar para ajustar correctamente mi clasificador?mn

gc5
fuente
3
Lo dudo. Pero una sugerencia: el área de aprendizaje automático que estudia el rendimiento en el aprendizaje automático se llama minimización empírica de riesgos . Puede intentar agregar esas palabras clave a sus búsquedas.
Ricardo Cruz

Respuestas:

7

Esto no es necesariamente una respuesta a su pregunta. Solo pensamientos generales sobre la validación cruzada del número de árboles de decisión dentro de un bosque aleatorio.

Veo a muchas personas en kaggle y stackexchange validando de forma cruzada el número de árboles en un bosque aleatorio. También le pregunté a un par de colegas y me dijeron que es importante validarlos para evitar el sobreajuste.

Esto nunca tuvo sentido para mí. Dado que cada árbol de decisión se entrena de manera independiente, agregar más árboles de decisión debería hacer que su conjunto sea más y más robusto.

(Esto es diferente de los árboles que aumentan el gradiente, que son un caso particular de aumento de ada y, por lo tanto, existe un potencial de sobreajuste, ya que cada árbol de decisión está entrenado para pesar más los residuos).

Hice un experimento simple:

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

actuación

No digo que estés cometiendo esta falacia de pensar que más árboles pueden causar un sobreajuste. Claramente no lo eres ya que has pedido un límite inferior. Esto es algo que me ha estado molestando por un tiempo, y creo que es importante tenerlo en cuenta.

(Anexo: Elementos de aprendizaje estadístico discute esto en la página 596, y está de acuerdo conmigo en esto. «Es cierto que aumentar B [B = número de árboles] no hace que la secuencia aleatoria del bosque se sobreajuste». El autor sí hace la observación de que "este límite puede sobreajustar los datos". En otras palabras, dado que otros hiperparámetros pueden conducir a un sobreajuste, crear un modelo robusto no lo rescata del sobreajuste. Debe prestar atención al validar de forma cruzada sus otros hiperparámetros. )

Para responder a su pregunta, agregar árboles de decisión siempre será beneficioso para su conjunto. Siempre lo hará más y más robusto. Pero, por supuesto, es dudoso que la reducción marginal de la varianza 0.00000001 valga el tiempo computacional.

Por lo tanto, su pregunta, según tengo entendido, es si de alguna manera puede calcular o estimar la cantidad de árboles de decisión para reducir la varianza del error por debajo de un cierto umbral.

Lo dudo mucho. No tenemos respuestas claras para muchas preguntas amplias en minería de datos, y mucho menos preguntas específicas como esa. Como escribió Leo Breiman (autor de bosques aleatorios), existen dos culturas en el modelado estadístico , y los bosques aleatorios son el tipo de modelo que, según él, tiene pocas suposiciones, pero también es muy específico de los datos. Por eso, dice, no podemos recurrir a la prueba de hipótesis, tenemos que ir con la validación cruzada de fuerza bruta.

Ricardo Cruz
fuente
Mh, pensé que aumentar el número de árboles conduciría a un aumento del componente de sesgo del error (que de alguna manera está contrarrestado por una variación decreciente del modelo).
gc5
1
Siempre pensé que agregar árboles nunca podría doler, pero en The Elements of Statistical Learning, página 596, afirman que un bosque demasiado rico puede introducir una variabilidad adicional, por lo que creo que su respuesta sigue siendo correcta, pero con un pequeño grano de sal: )
TBSRounder
1
@TBSRounder Gracias por el enlace. El autor está discutiendo demasiadas cosas en un texto tan corto, por lo que es difícil destilarlo, especialmente confuso porque habla sobre la profundidad y el número de árboles al mismo tiempo. Pero, con respecto a B (= # árboles), está diciendo que más árboles acercan el modelo resultante al árbol promedio y, por supuesto, el árbol promedio puede estar sesgado, por lo que puede terminar con un modelo sesgado. Nunca dije lo contrario. Acabo de decir que B, por sí solo, no aumenta el sesgo. Simplemente hace que su modelo sea más robusto (= reduce la varianza).
Ricardo Cruz
Ah sí, fue un poco confuso, gracias por la aclaración. Por alguna razón, pensé que el autor estaba hablando de B, no de la profundidad del árbol.
TBSRounder