16 votos

El bosque aleatorio está sobreajustado

Estoy intentando utilizar la regresión de Random Forest en scikits-learn. El problema es que estoy recibiendo un error de prueba muy alto:

train MSE, 4.64, test MSE: 252.25.

Este es el aspecto de mis datos: (azul: datos reales, verde: predicción):

Forest regression cleaned

Estoy utilizando el 90% para la formación y el 10% para la prueba. Este es el código que estoy utilizando después de probar varias combinaciones de parámetros:

rf = rf = RandomForestRegressor(n_estimators=10, max_features=2, max_depth=1000, min_samples_leaf=1, min_samples_split=2, n_jobs=-1) 
test_mse = mean_squared_error(y_test, rf.predict(X_test))
train_mse = mean_squared_error(y_train, rf.predict(X_train))

print("train MSE, %.4f, test MSE: %.4f" % (train_mse, test_mse))
plot(rf.predict(X))
plot(y)

¿Cuáles son las posibles estrategias para mejorar mi adaptación? ¿Hay algo más que pueda hacer para extraer el modelo subyacente? Me parece increíble que después de tantas repeticiones del mismo patrón el modelo se comporte tan mal con los nuevos datos. ¿Tengo alguna esperanza al intentar ajustar estos datos?

0 votos

¿Está entrenando esta función periódica con el eje x como entrada, y el eje y como etiqueta para x <= 245, y luego probando para x > 245? ¿O estoy malinterpretando tu gráfico?

0 votos

En realidad, el eje x es el índice de observación, en total hay 300 observaciones, por lo que a partir de 245, que son los datos de prueba no se utiliza para el entrenamiento del modelo, el vector de características de entrada se compone de números enteros, tiene la forma (300,2) y se asemejan a una función lineal del índice de observación, por lo que no añadir información al respecto con el fin de no complicar la cuestión.

1 votos

Tal vez quiera eliminar primero el ciclo (la parte estacional) de sus datos (y la tendencia).

0voto

Denis Warburton Puntos 11

Después de leer el post anterior, quiero dar otra respuesta diferente.

En el caso de los modelos basados en árboles, como los bosques aleatorios, no pueden extrapolar el valor más allá del conjunto de entrenamiento. Por lo tanto, no creo que se trate de un problema de sobreajuste, sino de una estrategia de modelado errónea.

Entonces, ¿qué podemos hacer para la predicción de series temporales con el modelo de árbol?

La forma posible es combinarla con la regresión lineal: primero, desdiferenciar la serie temporal (o modelar la tendencia con la regresión lineal), y luego modelar el residuo con árboles (los residuos están acotados, por lo que los modelos de árbol pueden manejarlo).

Además, hay un modelo de árbol combinado con la regresión lineal puede extrapolar, llamado cubista, hace la regresión lineal en la hoja.

0voto

Deepon GhoseRoy Puntos 16

Si simplemente se quiere predecir dentro de los límites del gráfico, entonces basta con aleatorizar las observaciones antes de dividir el conjunto de datos para resolver el problema. Entonces se convierte en un problema de interpolación a partir del de extrapolación, como se muestra.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X