Шаг прогнозирования для временных рядов с использованием непрерывных скрытых марковских моделей - PullRequest
0 голосов
/ 25 декабря 2018

Я пытаюсь предсказать фондовый рынок, используя гауссовский HMM.Я не понимаю, как выполняется этап прогнозирования после обучения модели.Я не понимал, как точное предсказание наиболее вероятной последовательности состояний может помочь предсказать будущее значение.

Один из задаваемых вопросов предлагает этот метод: «Используйте алгоритм Витерби с (частичной) последовательностью, чтобы получить наиболее вероятноепоследовательность скрытого состояния. Возьмите распределение излучения последнего скрытого состояния в этой последовательности и прогнозируйте, например, среднее значение этого распределения (которое часто является гауссовым). "

Я не получил то, что он говорит, после предсказания большинствапоследовательность вероятных состояний.

Я обучил свою модель, используя функции, доступные с hmmlearn в python.Я также применил алгоритм Витерби к образцу, чтобы предсказать возможную последовательность скрытых состояний.Но я понятия не имею, что делать после этого.Я не очень хорош с математикой непрерывного HMM.Подскажите пожалуйста, как именно делается прогноз.

Код:

import numpy as np 
from hmmlearn import hmm
import pandas as pd

np.random.seed(42)
model = hmm.GaussianHMM(n_components=3, covariance_type="full",algorithm='viterbi')
model.startprob_ = np.array([0.3,0.4,0.6])
model.transmat_ = np.array([[0.7, 0.2, 0.1], [0.3, 0.5, 0.2], [0.3, 0.3, 0.4]])
model.means_ = np.array([[0.0], [3.0], [5.0]])
model.covars_ = np.tile(np.identity(1), (3, 1, 1))

df = pd.read_csv("HistoricalQuotes.csv")
Y = df['close'][2:40]
Y = Y[::-1]
X = np.array(Y)
X = np.reshape(X, (-1,1))

model.fit(X)

Y = df['close'][40:55]
Y = Y[::-1]
X = np.array(Y)

Z =  model.predict(X)

1 Ответ

0 голосов
/ 29 декабря 2018

Вы не так далеко от своей цели!

Я также применил алгоритм Витерби к образцу, чтобы предсказать возможную последовательность скрытых состояний

С алгоритмом Витербивы на самом деле предсказали наиболее вероятную последовательность скрытых состояний.Последнее состояние соответствует наиболее вероятному состоянию для последней выборки временных рядов, которые вы передали в качестве входных данных.

Чтобы предсказать следующую выборку, вам необходимо оценить, какое состояние является следующим выбросом, наиболее вероятнымс.

Для этого вы можете использовать матрицу перехода состояний, которая была оценена на этапе обучения, т. е. обновленное значение model.transmat_.

.Предсказанный следующий пример позволяет использовать распределение Гаусса, связанное с этим состоянием.Допустим, вы прогнозировали состояние K, тогда параметры гауссовского распределения будут найдены в обновленных значениях model.means_[K] и model.covars_[K] (под обновлением я имею в виду обновление на этапе обучения).

Затем вам предлагается несколько вариантов: вы можете выбрать случайную выборку из распределения Гаусса или выбрать новую выборку со значением среднего значения Гаусса.Это зависит от ваших целей и проблемы, которую вы решаете.

...