用多类观察序列训练 hmmlearn HMM

Posted

技术标签:

【中文标题】用多类观察序列训练 hmmlearn HMM【英文标题】:Training hmmlearn HMM with multiple classes of observation sequence 【发布时间】:2015-11-14 20:29:06 【问题描述】:

我有两个训练集(已知类别的观察),代表我数据中的两种可能状态。我想让 hmmlearn 估计开始, 这两个训练集的转换和发射概率。

我的数据是 0-1 之间的值列表。我已经使用保守的阈值将数据分成粗略的“A”和“B”组。我想使用 HMM 来细化我的数据更改状态的点。

对于单个训练/测试序列 X,我会这样做:

X = [0, 1, 1, 1, 0.1, 0.015, 0.01, 0.001, 0.005, 0.001, 0.2, 1, 0.8, 1, 1, 0.3]
states = ["A", "B"]

#Fit model, auto set probabilities
model = hmm.MultinomialHMM(n_components=2, covariance_type="full")
model.fit([X])

#Predict states
Z = model.predict(X)

#Predict a sequence of hidden states based on visible states
logprob, state = model.decode(X, algorithm="viterbi")
print "States:", ", ".join(map(lambda x: states[x], state))
>>> States: A, B, B, B, B, A, A, A, A, A, B, B, B, B, B, B

我想知道如何分别训练状态 A 和状态 B。

【问题讨论】:

【参考方案1】:

fit 方法采用观察序列列表。在您的示例中,假设您的 X 表示为 X1,而另一组表示为 X2,您只需运行:

model.fit([X1,X2])

【讨论】:

为了完整性:这在hmmlearn 0.2.0 中不起作用。请参阅tutorial 中的“使用多个序列”。

以上是关于用多类观察序列训练 hmmlearn HMM的主要内容,如果未能解决你的问题,请参考以下文章

python 日常笔记 hmmlearn 隐性马尔科夫模型案例分析

将 scikits.learn.hmm.GaussianHMM 拟合到可变长度的训练序列

HMM说清楚?

MATLAB中HMM函数SEQ(观察序列的值)必须是正整数吗

声学模型GMM-HMM

深度剖析HMM(附Python代码)2.隐马尔科夫链HMM的EM训练过程