如何在Python中使用hmmlearn运行隐马尔可夫模型?

我尝试使用来自GitHub的hmmlearn来运行一个二元隐马尔可夫模型,但没有成功:

import hmmlearn.hmm as hmmtransmat = np.array([[0.7, 0.3],                      [0.3, 0.7]])emitmat = np.array([[0.9, 0.1],                    [0.2, 0.8]])obs = np.array([0, 0, 1, 0, 0])startprob = np.array([0.5, 0.5])h = hmm.MultinomialHMM(n_components=2, startprob=startprob,                       transmat=transmat)h.emissionprob_ = emitmat# 失败h.fit([0, 0, 1, 0, 0])# 失败h.decode([0, 0, 1, 0, 0])print h

我得到了这个错误:

ValueError: 无法连接零维数组

如何正确使用这个模块?请注意,我使用的是从sklearn中分离出来的hmmlearn版本,因为显然sklearn不再维护hmmlearn了。


回答:

fit函数接受的是序列列表,而不是单个序列(因为通常情况下你可以有多个独立序列,这些序列是来自不同实验/观察的运行结果)。因此,只需将你的列表再放入一个列表中即可

import hmmlearn.hmm as hmmimport numpy as nptransmat = np.array([[0.7, 0.3],                      [0.3, 0.7]])emitmat = np.array([[0.9, 0.1],                    [0.2, 0.8]])startprob = np.array([0.5, 0.5])h = hmm.MultinomialHMM(n_components=2, startprob=startprob,                       transmat=transmat)h.emissionprob_ = emitmat# 运行正常h.fit([[0, 0, 1, 0, 0]]) # h.fit([[0, 0, 1, 0, 0], [0, 0], [1,1,1]]) # 这就是这种语法的原因,你可以拟合到多个序列    print h.decode([0, 0, 1, 0, 0])print h

结果如下

(-4.125363362578882, array([1, 1, 1, 1, 1]))MultinomialHMM(algorithm='viterbi',        init_params='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',        n_components=2, n_iter=10,        params='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ',        random_state=<mtrand.RandomState object at 0x7fe245ac7510>,        startprob=None, startprob_prior=1.0, thresh=0.01, transmat=None,        transmat_prior=1.0)

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注