繁体   English   中英

使用hmmlearn收敛到一个状态的隐马尔可夫模型

[英]Hidden Markov Model converging to one state using hmmlearn

我有一个要解决的机器学习问题。 我正在使用具有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,则它看起来像这样(如果我按状态进行平均,则分离会更糟)。

在此处输入图片说明

显然,您的模型学习了状态2的大方差。GMM是使用最大似然准则训练的生成模型,因此在某种意义上,您可以获得与数据的最佳拟合。 我可以看到它在极端情况下提供了有意义的预测,因此,如果您希望它将更多观察结果归因于2以外的类,则可以尝试以下操作:

  1. 数据预处理。 尝试使用日志值作为输入,以使它们之间的差异更加明显。
  2. 查看您的转换矩阵,状态2的转换概率可能太低。 尝试将所有概率设置为相等,然后看看会发生什么。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM