为什么每次运行函数hmmlearn.hmm.GaussianHMM.fit()时都会得到不同的值

时间:2016-10-08 09:39:53

标签: hmmlearn

我有一个程序。

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”的值如下,

enter image description here

我第二次运行代码,“hidden_​​states”的值如下, enter image description here

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

2 个答案:

答案 0 :(得分:1)

我不完全确定这里会发生什么,但这里有两个可能的解释,你看到的结果。

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

答案 1 :(得分:0)

在定义模型时,通过设置seedrandom_state来尝试控制随机性。此外,您可以初始化startprob_transmat_并查看其行为。

这样你就可以更好地解释这种行为的原因。