我正在尝试使用高斯HMM预测股市。在训练模型后,我没有得到预测步骤的完成方式。我不了解准确预测最可能的状态序列如何有助于预测未来价值。
提出的一个问题建议使用此方法: “使用具有(部分)序列的维特比算法来获得最可能的隐藏状态序列。获取该序列中最后一个隐藏状态的发射分布,并预测例如该分布的平均值(通常是高斯分布)。”
在预测了最可能的状态序列之后,我没有明白他的意思。
我已经使用python中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)
答案 0 :(得分:1)
距离目标不远!
我还对样本应用了维特比算法来预测可能的隐藏状态序列
使用维特比算法,您实际上预测了最可能的隐藏状态序列。最后状态对应于您作为输入传递的时间序列的最后一个样本的最可能状态。
为了预测下一个样本,您需要估计下一个排放最有可能来自哪个状态。
为此,您可以使用在训练阶段估算的状态转换矩阵,即model.transmat_
的更新值。
一旦预测了下一个样本的最有可能的状态,就可以使用与该状态相关的高斯分布。假设您预测了状态K
,那么将在model.means_[K]
和model.covars_[K]
的更新值中找到高斯分布的参数(通过更新,我的意思是在训练阶段进行更新)。
然后提供了几种选择:您可以选择从高斯分布中绘制随机样本,也可以选择将新样本分配给高斯均值。这取决于您的目标和要解决的问题。