5 votos

¿Cómo extrapolar esta simple línea de tendencia hacia el futuro con el fin de hacer una previsión en Matlab?

Tenemos los siguientes datos en variable data que pertenece a un problema que estamos resolviendo:

                9996792524
                8479115468
               11394750532
                9594869828
               10850291677
               10475635302
               10116010939
               11206949341
               11975140317
               11526960332
                9986194500
               11501088256
               11833183163
               13246940910
               13255698568
               13775653990
               13567323648
               14607415705
               13835444224
               14118970743

Estos números de fecha correspondientes se almacenan en una variable timevalues :

          735678.574305556
          735710.586805556
          735863.672916667
          735888.539583333
          735921.589583333
          735941.590972222
          735986.583333333
          736021.481944444
          736043.498611111
                  736063.5
          736083.504166667
              736223.35625
                 736250.45
          736278.452083333
          736314.327777778
          736356.239583333
          736383.209722222
              736411.10625
          736431.925694444

Ajustamos un polinomio de 9º grado a estos datos y los trazamos como sigue:

data9 = fit( timevalues, data, 'poly9', 'Normalize', 'on' );
plot(data9,timevalues,data);

enter image description here

Ahora tenemos que extrapolar esta tendencia / polinomio en el futuro o para más valores de timevalues en el eje X. ¿Cómo lo hacemos?

ACTUALIZACIÓN: Descripción de nuestro problema Tenemos bits por segundo observados en nuestro dispositivo de firewall fronterizo, que es lo que son estos valores. Hay MUCHOS de estos valores en intervalos de 1 minuto en los últimos 4 años (más de un millón). No todos los valores son útiles porque sólo queremos ver cómo la tendencia de los picos aumenta en el tiempo, ya que queremos aumentar nuestra capacidad de carga antes de llegar al 'máximo' algún día. En otras palabras, no nos interesan los valles ni los valores medios, sino los 'picos'. Así que utilizamos el findpeaks() en Matlab para encontrar los picos en nuestros datos (que son los valores de arriba). Ahora estamos tratando de ajustar una línea de tendencia en estos picos y extrapolarla para ver cómo tenemos que aumentar la capacidad en el dispositivo de frontera.

1voto

Aaron Puntos 36

Por favor, permítame advertirle claramente: ¡no extrapolar un ajuste polinómico! Hay pocas cosas en las estadísticas que puedan llevar al desastre. Cualquier ajuste polinómico es una aproximación localizada a una función basada en el polinomio de Taylor. Por necesidad, los términos de orden superior explotarán (positiva o negativamente) a medida que se salga del rango de los datos ajustados. Esto significa que la extrapolación de una curva polinómica ajustada le llevará a predecir valores explosivos positivos o negativos.

0voto

Dom Puntos 217

¿Es un conjunto de datos de aprendizaje automático? ¿De qué se trata? Tenga mucho cuidado con exceso de ajuste . Puede haber una gran diferencia entre ajustar bien un modelo y obtener buenas previsiones. De nuevo, vea más sobre el tema aquí .

Ahora, respondiendo a tu pregunta, primero, necesitas encontrar los valores de x que le interesa. La teoría en la que se basa su modelo puede orientarle en este sentido. Podría seleccionar valores igualmente espaciados, o seguir un patrón observado en su x datos. De nuevo, esto depende de su interés.

En segundo lugar, hay que predecir los valores de y de estos x . Hay varias técnicas. Por un lado, si sólo quieres punto para las previsiones, basta con introducir en el modelo los valores del eje x que se quieren predecir, y se obtendrá la previsión puntual. Como alternativa, puede hacer bootstrapping para obtener una distribución de previsiones. En Matlab, estas técnicas ya están integradas en la caja de herramientas de aprendizaje automático y otras relacionadas. Fíjate que no vienen con el Matlab estándar. Usted podría considerar el uso de R en su lugar. Es gratis y hay un montón de cajas de herramientas para hacer bootstrapping disponibles.

Por último, quiero insistir de nuevo en el problema del sobreajuste. La forma de evitarlo es aplicar técnicas de validación cruzada. La idea es dividir los datos de tal manera que los datos de los que se estima el modelo sean diferentes de los datos en los que se prueba el modelo. Este método le permite ejecutar fuera de la muestra predicción, que se considera la prueba decisiva de la capacidad de predicción del modelo. La predicción en la muestra es una prueba débil para el modelo. Al final, la validación cruzada permite encontrar el punto óptimo entre el ajuste y la precisión de la predicción. Al igual que antes, las técnicas de validación cruzada también están integradas con el aprendizaje automático y la caja de herramientas relacionada en Matlab. También en este caso, una alternativa es utilizar R.

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