我正在尝试使用高斯 HMM 预测股票市场。我不知道模型训练后预测步骤是如何完成的。我不明白准确预测最可能的状态序列如何有助于预测 future 值(value)。
其中一个问题提出了这种方法: “使用带有(部分)序列的维特比算法来获得最可能的隐藏状态序列。采用该序列中最后一个隐藏状态的发射分布并预测例如该分布的平均值(通常是高斯分布)。”
在预测最可能的状态序列后,我没有得到他说的话。
我已经使用 python 中的 hmmlearn
提供的函数训练了我的模型。我还在样本上应用了 Viterbi 算法来预测可能的隐藏状态序列。但是我不知道在那之后该怎么做。我不擅长连续 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)
最佳答案
您离目标不远了!
I have also applied Viterbi algorithm over the sample to predict the possible hidden state sequence
使用 Viterbi 算法,您实际上预测了隐藏状态的最可能序列。最后一个状态对应于您作为输入传递的时间序列的最后一个样本的最可能状态。
为了预测下一个样本,您需要估计下一个发射最有可能来自哪个状态。
为此,您可以使用在训练阶段估计的状态转移矩阵,即 model.transmat_
的更新值。
一旦您预测了下一个样本最有可能的状态,您就可以使用与该状态关联的高斯分布。假设您预测了状态 K
,那么高斯分布的参数将在 model.means_[K]
和 model.covars_[ 的更新值中找到K]
(更新,我的意思是在训练阶段更新)。
然后为您提供了几种选择:您可以选择从高斯分布中随机抽取样本,也可以选择将新样本分配给高斯均值。这取决于您的目标和您要解决的问题。
关于python - 使用连续隐马尔可夫模型的时间序列预测步骤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53922680/