Pregunta

Estoy buscando un algoritmo o material de ejemplo para estudiar y predecir eventos futuros basándose en patrones conocidos.Quizás haya un nombre para esto, y simplemente no lo sé o no lo recuerdo.Algo tan general puede que no exista, pero no soy un maestro en matemáticas o algoritmos, así que estoy aquí pidiendo dirección.

Un ejemplo, según tengo entendido sería algo como esto:

Un evento estático ocurre el 1 de enero, 1 de febrero, 3 de marzo y 4 de abril.Una solución simple sería promediar los días/horas/minutos/algo entre cada ocurrencia, agregar ese número a la última ocurrencia conocida y tener la predicción.

¿Qué estoy pidiendo o qué debo estudiar?

No hay ningún objetivo particular en mente ni ninguna variable específica que tener en cuenta.Este es simplemente un pensamiento personal y una oportunidad para mí de aprender algo nuevo.

¿Fue útil?

Solución

Creo que algunos temas que podrían ser vale la pena analizar incluyen , específicamente interpolación, extrapolación y regresión .

Otros consejos

Esto podría ser una exageración, pero cadenas de Markov puede conducir a algunas cosas bastante fresco reconocimiento de patrones . Es más adecuado para, así, cadenas de acontecimientos: la idea es, sobre la base de los últimos N pasos en una cadena de eventos, lo que sucederá después

Esto es muy adecuado para el texto: procesar una amplia muestra de Shakespeare, y se puede generar párrafos llenos de sentido Shakespeare-como! Desafortunadamente, se necesita un buen negocio más datos para averiguar eventos poco pobladas. (La detección de patrones con un período de un mes o más que requieren volver a realizar un seguimiento de una cadena de al menos un mes completo de datos.)

En pseudo-pitón, aquí es un bosquejo de una secuencia de comandos constructor cadena de Markov / predicción:

n = how_big_a_chain_you_want
def build_map(eventChain):
    map = defaultdict(list)
    for events in get_all_n_plus_1_item_slices_of(eventChain):
        slice = events[:n]
        last = events[-1]
        map[slice].append(last)

def predict_next_event(whatsHappenedSoFar, map):
    slice = whatsHappenedSoFar[-n:]
    return random_choice(map[slice])

No hay una solución única 'mejor' en lata, depende de lo que necesita. Por ejemplo, es posible que desee para promediar los valores como usted dice, pero el uso de medias ponderadas donde los antiguos valores no contribuyen tanto al resultado como los nuevos. O puede tomar un poco de suavizado. O puede probar para ver si la distribución de los eventos se ajusta a una distribución bien kjnown (como normal, de Poisson, uniforme).

Si usted tiene un modelo en mente (como los eventos ocurren con regularidad), a continuación, aplicar un filtro de Kalman para los parámetros de dicho modelo es una técnica común.

La única técnica que he trabajado para tratar de hacer algo así sería la formación de una red neuronal para predecir el siguiente paso en la serie. Eso implica interpretar el problema como un problema de clasificación de patrones, lo que no parece que gran un ajuste; Tengo a sospechar que hay formas menos difusos de tratar con ella.

Si solamente desea encontrar la probabilidad de que ocurra un evento después de n días dados los datos anteriores de su frecuencia, tendrá que ajustar a una distribución de probabilidad apropiada, que generalmente requiere saber algo sobre el origen del evento (tal vez cabe distribución de Poisson, tal vez gaussiano). Si usted quiere encontrar la probabilidad de que ocurra un evento dado que sucedieron eventos anteriores, tendrá que mirar la estadística bayesiana y cómo construir una cadena de Markov de eso.

La tarea es muy similar al lenguaje de modelado de tareas, donde dio una secuencia de palabras de historia el modelo intenta predecir una distribución de probabilidad sobre el vocabulario de la palabra siguiente.

Hay softwares de código abierto como SRILM y NLTK que simplemente se puede obtener en sus secuencias como frases de entrada (cada event_id es una palabra) y hacer el trabajo .

Debe google Programación Algoritmos Genéticos

(algo así como las Redes Neuronales mencionados por el Caos) le permitirá generar soluciones mediante programación, a continuación, hacer que el programa en sí modificar en base a un criterio, y crear nuevas soluciones que son de esperar cerca de precisión.

Redes Neuronales tendría que ser entrenado por usted, pero con la programación genética, el programa hará todo el trabajo.

A pesar de que es un infierno de un montón de trabajo para conseguir que se ejecuta en el primer lugar!

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top