我正试图用高斯HMM来预测股市。我不知道预测步骤是如何在模型训练之后完成的。我不明白如何准确地预测最可能的状态序列可以帮助预测未来的价值。
提出的问题之一建议这种方法:“使用维特比算法与(部分)序列,以获得最有可能的隐藏状态序列。以发射分布的最后一个隐藏状态,并预测,例如,平均分布(往往是高斯的)。”
在预测了最有可能的状态序列后,我没有明白他说的话。
我使用hmmlearn
在python中提供的函数训练了我的模型。我还将Viterbi算法应用于样本上,以预测可能的隐藏状态序列。但在那之后我不知道该怎么办。我不擅长连续的数学,嗯。请告诉我准确的预测是怎么做的。
代码:
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)
发布于 2018-12-29 15:40:04
你离你的目标不远!
我还将Viterbi算法应用于样本上,以预测可能的隐藏状态序列。
使用Viterbi算法,您实际上可以预测隐藏状态的最有可能的序列。最后一个状态对应于作为输入传递的时间序列的最后一个样本的最可能状态。
为了预测下一个样本,您需要估计哪个状态是下一个最有可能来自的排放。
为此,您可以使用在培训阶段估计的状态转换矩阵,即model.transmat_
的更新值。
一旦预测了下一个示例的最有可能的状态,就可以使用与该状态关联的高斯分布。假设您预测了状态K
,那么高斯分布的参数将在model.means_[K]
和model.covars_[K]
的更新值中找到(我的意思是在训练阶段更新)。
然后向您提供几种选择:您可以选择从高斯分布中抽取随机样本,也可以选择将新样本分配给高斯平均值。这取决于你的目标和你正在解决的问题。
https://stackoverflow.com/questions/53922680
复制相似问题