Шаг прогнозирования для временных рядов с использованием непрерывных скрытых марковских моделей
Я пытаюсь предсказать фондовый рынок, используя гауссовский HMM. Я не понимаю, как выполняется этап прогнозирования после обучения модели. Я не понимал, как точное предсказание наиболее вероятной последовательности состояний может помочь предсказать будущее значение.
Один из задаваемых вопросов предлагает этот метод: "Используйте алгоритм Витерби с (частичной) последовательностью, чтобы получить наиболее вероятную последовательность скрытых состояний. Возьмите распределение излучения последнего скрытого состояния в этой последовательности и прогнозируйте, например, среднее значение этого распределение (которое часто является гауссовым)."
Я не получил то, что он говорит после предсказания наиболее вероятной последовательности состояний.
Я обучил свою модель, используя функции, доступные с hmmlearn
в питоне. Я также применил алгоритм Витерби к образцу, чтобы предсказать возможную последовательность скрытых состояний. Но я понятия не имею, что делать после этого. Я не очень хорош с математикой непрерывного 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 ответ
Вы не так далеко от своей цели!
Я также применил алгоритм Витерби к образцу, чтобы предсказать возможную последовательность скрытых состояний
С помощью алгоритма Витерби вы фактически предсказали наиболее вероятную последовательность скрытых состояний. Последнее состояние соответствует наиболее вероятному состоянию для последней выборки временного ряда, который вы передали в качестве входных данных.
Для того, чтобы предсказать следующую выборку, вам необходимо оценить, из какого состояния вероятнее всего поступит следующая эмиссия.
Для этого вы можете использовать матрицу перехода состояний, которая была оценена на этапе обучения, т. Е. Обновленное значение model.transmat_
,
Когда вы, скорее всего, прогнозируете состояние для следующего образца, вы можете использовать гауссово распределение, связанное с этим состоянием. Допустим, вы предсказали состояние K
то параметры гауссовского распределения будут найдены в обновленных значениях model.means_[K]
а также model.covars_[K]
(под обновлением я подразумеваю обновление на этапе обучения).
Затем вам предлагается несколько вариантов: вы можете выбрать случайную выборку из распределения Гаусса или выбрать новую выборку со значением среднего значения Гаусса. Это зависит от ваших целей и проблемы, которую вы решаете.