标签: hidden-markov-models

马尔可夫链和隐马尔可夫模型有什么区别?

马尔可夫链模型和隐马尔可夫模型有什么区别?我在维基百科上读过,但无法理解这些差异.

markov-chains markov hidden-markov-models

44
推荐指数
4
解决办法
2万
查看次数

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

我想将scikits.learn.hmm.GaussianHMM与不同长度的训练序列相匹配.然而,拟合方法通过这样做来防止使用不同长度的序列

obs = np.asanyarray(obs)
Run Code Online (Sandbox Code Playgroud)

它只适用于同样形状的数组列表.有人提示如何继续吗?

python scikits hidden-markov-models scikit-learn

38
推荐指数
1
解决办法
2020
查看次数

前向后向算法和Viterbi算法有什么区别?

n-gram模型的前向后向算法和隐马尔可夫模型(HMM)上的Viterbi算法有什么区别?

当我回顾这两种算法的实现时,我发现的事情只是交易概率来自不同的概率模型.

这两种算法之间有区别吗?

algorithm nlp machine-learning viterbi hidden-markov-models

18
推荐指数
2
解决办法
6842
查看次数

训练隐马尔可夫模型和分类用法的问题

我在搞清楚如何使用Kevin Murphy的HMM工具箱工具箱时遇到了困难.如果有经验的人可以澄清一些概念性问题,那将是一个很大的帮助.我已经以某种方式理解了HMM背后的理论,但令人困惑的是如何实际实现它并提及所有参数设置.

有2个类,所以我们需要2个HMM.
假设训练向量是:class1 O1 = {4 3 5 1 2}和类O_2 = {1 4 3 2 4}.
现在,系统必须将未知序列O3 = {1 3 2 4 4}分类为class1或class2.

  1. 什么是在obsmat0和obsmat1?
  2. 如何指定转换概率transmat0和transmat1的/语法?
  3. 在这种情况下,可变数据是什么?
  4. 由于使用了五个唯一的数字/符号,状态数Q = 5吗?
  5. 输出符号数= 5?
  6. 我如何提及transmat0和transmat1的转换概率?

matlab machine-learning computer-vision hidden-markov-models

17
推荐指数
1
解决办法
2万
查看次数

多个观测变量的隐马尔可夫模型

我试图使用隐马尔可夫模型(HMM)来解决一个问题,即我在每个时间点都有不同的观察变量(Yti)和一个隐藏变量(Xt).为清楚起见,让我们假设所有观察到的变量(Yti)都是分类的,其中每个Yti传达不同的信息,因此可能具有不同的基数.下图给出了一个说明性的例子,其中M = 3.

在此输入图像描述

我的目标是使用Baum-Welch算法从我观察到的变量序列(Yti)中训练HMM的过渡,发射和先验概率.比方说,Xt最初会有2个隐藏状态.

我已经阅读了一些教程(包括着名的Rabiner论文),并阅读了一些HMM软件包的代码,即" MatLab中HMM工具箱 "和" Python中hmmpytk包 ".总的来说,我进行了广泛的网络搜索,我所能找到的所有资源 - 仅涵盖了每个时间点只有一个观察变量(M = 1)的情况.这越来越让我觉得HMM不适合具有多个观察变量的情况.

  • 是否有可能将图中描述的问题建模为HMM?
  • 如果是,如何修改Baum-Welch算法以满足基于多变量观测(发射)概率训练HMM参数的需要?
  • 如果没有,您是否知道更适合图中所示情况的方法?

谢谢.

编辑:本文中,图中描述的情况被描述为动态朴素贝叶斯,其中 - 在训练和估计算法方面 - 需要对单变量HMM略微扩展Baum-Welch和Viterbi算法.

machine-learning time-series hidden-markov-models

17
推荐指数
1
解决办法
2万
查看次数

带C++的隐马尔可夫模型

我最近一直在研究C++中隐藏马尔可夫模型的实现.我想知道如果我可以使用任何现有的用C++编写的HMM库来使用动作识别(使用OpenCV)?

我想要避免"重新发明轮子"!

是否有可能使用Torch3Vision,即使(看起来像)它被设计用于语音识别?

我的想法是,如果我们可以将特征向量转换为符号/观测(使用矢量量化 - Kmeans聚类),我们可以使用这些符号进行解码,推理,参数学习(Baum-Welch算法).这样它就可以在OpenCV中使用Torch3Vision.

任何有关这方面的帮助将非常感激.

opencv machine-learning computer-vision hidden-markov-models

16
推荐指数
2
解决办法
1万
查看次数

解码GaussianHMM中的序列

我正在玩Hidden Markov模型来解决股市预测问题.我的数据矩阵包含特定安全性的各种功能:

01-01-2001, .025, .012, .01
01-02-2001, -.005, -.023, .02
Run Code Online (Sandbox Code Playgroud)

我适合一个简单的GaussianHMM:

from hmmlearn import GaussianHMM
mdl = GaussianHMM(n_components=3,covariance_type='diag',n_iter=1000)
mdl.fit(train[:,1:])
Run Code Online (Sandbox Code Playgroud)

使用模型(λ),我可以解码观察向量以找到对应于观察向量的最可能的隐藏状态序列:

print mdl.decode(test[0:5,1:])
(72.75, array([2, 1, 2, 0, 0]))
Run Code Online (Sandbox Code Playgroud)

在上面,我已经解码了观察向量O t =(O 1,O 2,...,O d)的隐藏状态序列,其包含测试集中的前五个实例.我想估计测试集中第六个实例的隐藏状态.想法是迭代第六个实例的一组离散的可能特征值,并选择具有最高似然性的观测序列O t + 1 argmax = P(O 1,O 2,...,O d + 1 |λ ).一旦我们观察到O d + 1的真实特征值,我们就可以将序列(长度为5)移动一次并重新执行:

    l = 5
    for i in xrange(len(test)-l):
        values = []
        for a in arange(-0.05,0.05,.01):
            for b in arange(-0.05,0.05,.01):
                for c in arange(-0.05,0.05,.01):
                    values.append(mdl.decode(vstack((test[i:i+l,1:],array([a,b,c])))))
     print …
Run Code Online (Sandbox Code Playgroud)

python markov-chains markov-models hidden-markov-models hmmlearn

16
推荐指数
1
解决办法
1157
查看次数

隐马尔可夫模型

我想开始使用HMM,但不知道如何去做.人们可以在这里给我一些基本的指示,在哪里看?

不仅仅是理论,我喜欢做很多实践.所以,我更喜欢资源,我可以编写小代码片段来检查我的学习,而不仅仅是干文本.

statistics state-machine markov-models hidden-markov-models

13
推荐指数
1
解决办法
2561
查看次数

任何Matlab函数用于处理具有连续观测变量的隐马尔可夫模型?

在Matlab Statistics工具箱中,有几个用于处理隐马尔可夫模型(HMM)的函数,但它们都使用离散的观察符号.有没有人知道是否有可以处理连续观察变量的工具箱或功能(可能来自第三方)?

matlab hidden-markov-models

11
推荐指数
1
解决办法
2799
查看次数

如何为隐马尔可夫模型找到最可能的隐藏状态序列

Viterbi算法发现的隐马尔可夫模型隐藏状态的最有可能的序列。我目前正在使用hhquark的以下出色代码。

import numpy as np


def viterbi_path(prior, transmat, obslik, scaled=True, ret_loglik=False):
    '''Finds the most-probable (Viterbi) path through the HMM state trellis
    Notation:
        Z[t] := Observation at time t
        Q[t] := Hidden state at time t
    Inputs:
        prior: np.array(num_hid)
            prior[i] := Pr(Q[0] == i)
        transmat: np.ndarray((num_hid,num_hid))
            transmat[i,j] := Pr(Q[t+1] == j | Q[t] == i)
        obslik: np.ndarray((num_hid,num_obs))
            obslik[i,t] := Pr(Z[t] | Q[t] == i)
        scaled: bool
            whether or not to normalize the probability trellis along …
Run Code Online (Sandbox Code Playgroud)

python algorithm viterbi hidden-markov-models

11
推荐指数
1
解决办法
251
查看次数