我试着用高斯HMM来预测股市。我不知道在模型训练之后,预测步骤是如何完成的。我不明白准确地预测最可能的状态序列如何帮助预测未来的价值。在
其中一个问题建议采用这种方法: 使用Viterbi算法和(部分)序列来获得最有可能的隐藏状态序列。取这个序列中最后一个隐藏状态的发射分布,并预测例如该分布的平均值(通常是高斯分布)。”
在预测了最有可能的状态序列之后,我并没有明白他说的话。在
我使用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)
你离目标不远了!在
使用Viterbi算法,您实际上预测了隐藏状态的最可能序列。最后一个状态对应于作为输入传递的时间序列的最后一个样本的最可能状态。在
为了预测下一个样本,您需要估计下一个排放最可能来自哪个状态。在
为此,可以使用在训练阶段估计的状态转移矩阵,即
model.transmat_
的更新值。在一旦下一个样本最有可能的状态被预测出来,就可以使用与该状态相关联的高斯分布。假设您预测了状态}的更新值中找到(通过更新,我的意思是在训练阶段更新)。在
K
,那么高斯分布的参数将在model.means_[K]
和{然后提供了几个选择:您可以选择从高斯分布中随机抽取一个样本,或者选择将新样本分配给高斯平均值。这取决于你的目标和你正在解决的问题。在
相关问题 更多 >
编程相关推荐