我有一个正在尝试解决的机器学习问题。我正在使用具有 5 个状态的高斯 HMM(来自 hmmlearn),在序列中对极负、负、中性、正和极正进行建模。我已经在下面的要点中设置了模型
https://gist.github.com/stevenwong/cb539efb3f5a84c8d721378940fa6c4c
import numpy as np
import pandas as pd
from hmmlearn.hmm import GaussianHMM
x = pd.read_csv('data.csv')
x = np.atleast_2d(x.values)
h = GaussianHMM(n_components=5, n_iter=10, verbose=True, covariance_type="full")
h = h.fit(x)
y = h.predict(x)
问题是大多数估计的状态都收敛到中间,即使我可以明显地看到有正值和负值但它们都集中在一起。知道如何让它更好地拟合数据吗?
编辑1:
这是转移矩阵。我相信它在 hmmlearn 中的读取方式是跨行(即 row[0] 表示转换到自身的概率,状态 1、2、3...)
In [3]: h.transmat_
Out[3]:
array([[ 0.19077231, 0.11117929, 0.24660208, 0.20051377, 0.25093255],
[ 0.12289066, 0.17658589, 0.24874935, 0.24655888, 0.20521522],
[ 0.15713787, 0.13912972, 0.25004413, 0.22287976, 0.23080852],
[ 0.14199694, 0.15423031, 0.25024992, 0.2332739 , 0.22024893],
[ 0.17321093, 0.12500688, 0.24880728, 0.21205912, 0.2409158 ]])
如果我将所有转换概率设置为 0.2,它看起来像这样(如果我按状态进行平均,则分离会更糟)。