8 votos

Cómo evaluar de la mejor serie temporal de un algoritmo de predicción?

¿Cuál es la mejor práctica para la formación y evaluación de un algoritmo de predicción en series de tiempo?

Para los algoritmos de aprendizaje que se entrenan en el modo por lotes, un programador ingenuo podría dar la cruda conjunto de datos de [(sample, expected prediction),...] directamente para el algoritmo de train() método. Esto suele mostrar artificialmente un alto índice de éxito debido a que el algoritmo va a ser efectivamente "trampa" por el uso futuro de muestras para informar a las predicciones realizadas en anteriores muestras. Cuando en realidad se trata de utilizar el modelo de aprendizaje para predecir nuevos datos en tiempo real, probablemente va a realizar terriblemente, ya que no tiene futuro alguno de los datos que se basan en.

Mi enfoque actual es para entrenar y evaluar como usted puede en tiempo real. Para N muestras de formación, ordenadas cronológicamente, donde cada una de las muestras es una tupla compuesta de la entrada y se espera que la predicción de la salida B, tengo Una entrada en mi algoritmo y obtener el resultado real C. comparo esto con B y registrar el error. Luego añadir la muestra al local "pasado" subconjunto y hacer un lote de entrenar a un nuevo modelo en el subconjunto. Yo, a continuación, repita este proceso para cada muestra.

O, para ponerlo en pseudo-código:

predictor = Predictor()
training_samples = []
errors = []
for sample in sorted(all_samples, key=lambda o: o.date):
    input_data, expected_prediction = sample

    # Test on current test slice.
    actual_prediction = predictor.predict(input_data)
    errors.append(expected_prediction == actual_prediction)

    # Re-train on all "past" samples relative to the current time slice.
    training_samples.append(sample)
    predictor = Predictor.train(training_samples)

Esto parece muy completo, ya que simula lo que un usuario se vería obligado a hacer si se tuviera que hacer una predicción en cada paso de tiempo, pero es evidente que, para cualquier conjunto de datos, sería terriblemente lento, ya que estás multiplicando el algoritmo de tiempo de entrenamiento (que para muchos algoritmos y grandes conjuntos de datos es alta) por cada muestra.

Hay un método mejor?

10voto

icelava Puntos 548

Lo que usted propone es conocido como un "rolling origen" la evaluación en el pronóstico de la literatura. Y sí, este método de evaluación de los algoritmos de pronósticos es muy ampliamente utilizado.

Si usted encuentra que el rendimiento es un cuello de botella, usted podría hacer submuestreo. No utilice cada posible origen. En lugar de ello, utilice, por ejemplo, cada quinta posible origen. (Asegúrese de no introducir no deseados de confusión entre su croma orígenes y la estacionalidad en los datos. Por ejemplo, si se utilizan datos diarios, no utilice cada séptimo día como un origen, porque entonces sólo la evaluación de pronóstico de calidad de los martes, o sólo los jueves, etc.)

A continuación, de nuevo, usted realmente no necesita para entrenar el modelo de nuevo desde cero cada vez que sacas el origen adelante. Empezar desde el último modelo de aprendizaje. (Por ejemplo, en la Suavización Exponencial, simplemente la actualización de los componentes con los nuevos datos desde la última capacitación). Esto debería reducir dramáticamente los tiempos de entrenamiento.

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