0

我有一个程序。

n = 6 
data=pd.read_csv('11.csv',index_col='datetime')
volume = data['TotalVolumeTraded']



close = data['ClosingPx']
logDel = np.log(np.array(data['HighPx'])) - np.log(np.array(data['LowPx']))
logRet_1 = np.array(np.diff(np.log(close)))
logRet_5 = np.log(np.array(close[5:])) - np.log(np.array(close[:-5]))
logVol_5 = np.log(np.array(volume[5:])) - np.log(np.array(volume[:-5]))
logDel = logDel[5:]
logRet_1 = logRet_1[4:]
close = close[5:]
Date = pd.to_datetime(data.index[5:])
A = np.column_stack([logDel,logRet_5,logVol_5])


model = GaussianHMM(n_components= n, covariance_type="full", n_iter=2000).fit([A])
hidden_states = model.predict(A)

我第一次运行代码,“hidden_​​states”的值如下,

在此处输入图像描述

我第二次运行代码,“hidden_​​states”的值如下, 在此处输入图像描述

为什么两个值“hidden_​​states”不同?

4

2 回答 2

1

我不完全确定这里会发生什么,但是对于您所看到的结果,这里有两种可能的解释。

  1. 该模型不维护任何对状态标签的排序。因此,在一次运行中标记为 1 的状态可能在另一次运行中最终变为 4。这在潜变量模型中被称为标签切换问题。
  2. GaussianHMM通过 k-means 初始化发射参数,这些参数可能会根据数据收敛到不同的值。初始参数被传递给也容易出现局部最大值的 EM 算法。因此,不同的运行可能会导致不同的参数估计和(结果)略有不同的预测。
于 2016-10-10T21:58:40.613 回答
0

尝试通过在定义模型时设置seed和来控制随机性。random_state此外,您可以初始化 thestartprob_和 thetransmat_并查看它的行为方式。

这样,您可能会对这种行为的原因有更好的解释。

于 2017-11-03T19:17:59.523 回答