10

我正在尝试使用高斯 HMM 预测股市。我没有得到模型训练后如何完成预测步骤。我不明白准确预测最可能的状态序列如何有助于预测未来价值。

提出的问题之一建议使用这种方法:“使用带有(部分)序列的维特比算法来获得最可能的隐藏状态序列。获取该序列中最后一个隐藏状态的发射分布并预测例如该序列的平均值分布(通常是高斯分布)。”

在预测最可能的状态序列后,我没有得到他所说的。

hmmlearn我已经使用python 中可用的函数训练了我的模型。我还在样本上应用了 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)
4

1 回答 1

7

你离你的目标不远了!

我还在样本上应用了维特比算法来预测可能的隐藏状态序列

使用维特比算法,您实际上预测了最可能的隐藏状态序列。最后一个状态对应于您作为输入传递的时间序列的最后一个样本的最可能状态。

为了预测下一个样本,您需要估计下一个发射最有可能来自哪个状态。

为此,您可以使用在训练阶段估计的状态转移矩阵,即 的更新值model.transmat_

一旦预测了下一个样本最有可能的状态,您就可以使用与该状态相关联的高斯分布。假设您预测 state K,那么高斯分布的参数将在 和 的更新值中找到model.means_[K]model.covars_[K]通过更新,我的意思是在训练阶段更新)。

然后为您提供了几种选择:您可以选择从高斯分布中抽取随机样本,也可以选择将新样本分配给高斯均值的值。这取决于你的目标和你正在解决的问题。

于 2018-12-29T15:40:04.510 回答