Loading [MathJax]/jax/element/mml/optable/GeneralPunctuation.js

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

22voto

ESRogs Puntos 1381

Creo que estás utilizando una herramienta incorrecta; si toda tu X es equivalente al índice, básicamente estás teniendo alguna función muestreada f:RR y tratar de extrapolarla. El aprendizaje automático consiste en interpolar la historia, por lo que no es de extrañar que en este caso obtenga un fallo espectacular.

Lo que necesitas es un análisis de series temporales (es decir, extraer la tendencia, analizar el espectro y autorregresión o HMM el resto) o física (es decir, pensar si hay una EDO que pueda producir esa salida y tratar de ajustar sus parámetros mediante cantidades conservadas).

0 votos

¿el aprendizaje automático no consiste en extraer modelos generalizables de los datos? Una vez que se tiene un cierto conjunto de los que interpolan bien los datos, podemos elegir los que tienen mejores propiedades de extrapolación/generalización utilizando, por ejemplo, la validación cruzada. ¿Hay algún error en mi comprensión?

0 votos

La extrapolación es diferente de la generalización -- imagina que eres un sujeto de un experimento siguiente: ves una pantalla y tienes un botón rojo y otro verde. En primer lugar, la pantalla muestra un vídeo de la habitación en la que te encuentras en la que otra persona ha pulsado el botón verde para el gato, el león y el tigre que se muestran en la pantalla y luego el rojo para el lobo y el perro y de esta manera ha recogido 5 deliciosas galletas.

1 votos

Ahora, la pantalla muestra un gato montés; realizas una interpolación adecuada y generalizada del historial, pulsas el botón verde y recibes una descarga eléctrica en lugar de una galleta. ¿Por qué ha ocurrido esto? Porque la solución es un ciclo (g-g-r-r-r) y las imágenes de animales son sólo un engaño. Usted ha hecho lo mismo con su bosque: lo ha atraído a una reproducción tonta de su conjunto de entrenamiento mientras oculta la información real.

9voto

Corey Ross Puntos 1096

El mayor problema es que los árboles de regresión (y los algoritmos basados en ellos, como los bosques aleatorios) predicen funciones constantes a trozos, dando un valor constante a las entradas que caen bajo cada hoja. Esto significa que al extrapolar fuera de su dominio de entrenamiento, simplemente predicen el mismo valor que tendrían para el punto más cercano en el que tuvieran datos de entrenamiento. @mbq tiene razón en que hay herramientas especializadas para el aprendizaje de series temporales que probablemente sean mejores que las técnicas generales de aprendizaje automático. Sin embargo, los bosques aleatorios son particularmente malos para este ejemplo, y allí otras técnicas generales de ML probablemente se comportarían mucho mejor que lo que estás viendo. Las SVM con núcleos no lineales son una opción que se me ocurre. Dado que su función tiene una estructura periódica, esto también sugiere trabajar en el dominio de la frecuencia, utilizando componentes de Fourier o wavelets.

0 votos

AFAIK SVM tiene el mismo problema que random forest. No predicen bien fuera del espacio donde han sido entrenados. Probablemente las redes neuronales serían una mejor solución.

0 votos

Si los datos se encuentran en una curva y el núcleo es del tipo adecuado para ajustarse a esa curva, entonces una SVM podrá extrapolar a lo largo de esa curva. ed si los datos tienen una tendencia lineal, entonces una SVM lineal se ajustará a la línea extrapolará a lo largo de esa línea. Los núcleos más complejos pueden ajustarse y extrapolar comportamientos más complejos. Depende de tener el tipo de kernel adecuado. Eso no hace que las SVM sean la herramienta adecuada para la extrapolación y la predicción de TS, pero las hace mejores que los bosques aleatorios.

4voto

ssn Puntos 472

Algunas sugerencias:

  1. Ajuste sus parámetros utilizando un enfoque de ventana rodante (su modelo debe estar optimizado para predecir el siguiente valores en la serie temporal, no para predecir valores entre los suministrados)
  2. Pruebe otros modelos (incluso los más sencillos, con la selección de rasgos y las estrategias de ingeniería de rasgos adecuadas, podrían resultar más adecuados para su problema)
  3. Intenta aprender las transformaciones óptimas de la variable objetivo (afina esto también, hay una tendencia lineal/exponencial negativa, puedes ser capaz de estimarla)
  4. Análisis espectral tal vez
  5. Parece que los máximos/mínimos están igualmente espaciados. Aprenda dónde están dadas sus características (sin entrada del operador, haga que un algoritmo lo descubra para eliminar el sesgo) y añada esto como una característica. También diseñe una característica nearest maximum . No sé, puede que funcione, o tal vez no, sólo puedes saberlo si lo pruebas :)

3voto

MadBoy Puntos 2447

Este es un ejemplo de libro de texto de sobreajuste de datos, el modelo funciona muy bien con los datos entrenados pero se colapsa con cualquier dato nuevo de prueba. Esta es una de las estrategias para solucionar este problema: Hacer una validación cruzada de diez veces de los datos de entrenamiento para optimizar los parámetros.

Paso 1. Crear una función de minimización del MSE utilizando la optimización NM. Un ejemplo puede verse aquí: http://glowingpython.blogspot.de/2011/05/curve-fitting-using-fmin.html

Paso 2. Dentro de esta función de minimización, el objetivo es reducir el MSE. Para ello, se crea una división de los datos en diez pliegues en la que se aprende un nuevo modelo en 9 pliegues y se prueba en el décimo pliegue. Este proceso se repite diez veces, para obtener el MSE en cada pliegue. El MSE agregado se devuelve como resultado del objetivo.

Paso 3. El fmin en python hará las iteraciones por ti. Comprueba qué hiperparámetros son necesarios para el ajuste fino (n_estimadores, max_figuras, etc.) y pásalos al fmin.

El resultado serán los mejores hiperparámetros que reducirán la posibilidad de sobreajuste.

0 votos

Sí, parece que hay un exceso de ajuste (algo que normalmente no hace la regresión de Random Forest, de ahí la pregunta). Ahora he observado que cambiar los parámetros tiene poco efecto con los regresores RF. Ahora la validación cruzada requiere un modelo subyacente lo suficientemente flexible como para ser optimizado. ¿Qué tipo de modelos/algoritmos de ML recomiendan para este tipo de datos?

1voto

Valentin Kantor Puntos 176

Este es un problema interesante. Sus datos sugieren cierta regularidad (periódica x^2 como las funciones), pero tiene picos agudos en las transiciones. Todo esto sugiere un modelo ligeramente complejo. Yo modelaría estos datos mediante una sucesión de x_2 funciones parametrizadas por un coeficiente y un parámetro de desplazamiento.

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