标签: hidden-markov-models

三面骰子的隐马尔可夫模型

我被教授HMM并且给了这个家庭作业问题.我理解了它的一部分,但我不确定它是否正确.问题是:

考虑一个不同的游戏,经销商不会翻转硬币,而是使用标签1,2和3滚动三面模具.(尽量不要考虑三面模具的外观.)经销商已经两个装载的骰子D1和D2.对于每个骰子Di,滚动数字i的概率是1/2,并且其他两个结果中的每一个的概率是1/4.在每个回合,经销商必须决定是(1)保持相同的骰子,(2)切换到另一个骰子,或(3)结束游戏.他选择(1)概率为1/2,其他每个概率为1/4.开始时,经销商以相同的概率选择两个骰子中的一个.

  • 为这种情况提供HMM.指定字母表,状态,转换概率和发射概率.包括开始状态开始,并假设HMM以状态开始以概率1开始.还包括结束状态结束.

  • 假设您观察到以下的模具辊序列:1 1 2 1 2 2.找到最能说明辊子顺序的状态序列.这个序列的概率是多少?通过完成Viterbi表找到答案.在单元格中包含回溯箭头,以便您可以追溯状态序列.以下某些事实可能有用:

    log2(0)=-∞log2
    (1/4)= -2
    log2(1/2)= -1
    log2(1)= 0

  • 对于这种模具辊序列,实际上存在两种最佳状态序列.另一个国家的序列是什么?

如果我对第一部分没有错,我必须做类似这里的事情http://en.wikipedia.org/wiki/Hidden_​​Markov_model#A_concrete_example但是我没有得到假设以概率1开始的东西.

另外,我不知道在问题的第二部分我要为维特比表做些什么.如果任何身体可以给我一些提示或线索,那将是伟大的.

algorithm probability bioinformatics hidden-markov-models

6
推荐指数
1
解决办法
984
查看次数

用于手势识别的HMM算法

我想开发一个使用Kinect和手势识别的应用程序hidden Markov models.我在这里看了一个教程:HMM讲座

但我不知道如何开始.什么是状态集以及如何规范化数据以实现HMM学习?我知道(或多或少)应该如何处理信号和简单的"从左到右"的情况,但3D空间让我有点困惑.谁能形容它应该如何开始?

谁能形容这些步骤,怎么做?特别是我需要知道如何做模型以及HMM算法的步骤应该是什么.

algorithm gesture-recognition gestures hidden-markov-models kinect

6
推荐指数
1
解决办法
5178
查看次数

使用HMM进行离线字符识别

我已提取的特征从分离的字符(如梯度许多图像,相邻像素的重量和几何性质.如何使用的HMM作为训练该数据分类?所有文献我读到HMM是指状态和状态转换但是我"t将其连接到的功能和一流的标签.这个例子上JAHMM的主页没有涉及到我的问题.我需要使用HMM不是因为它会比其他方法对这个问题好,但因为项目课题的约束.

这个问题有一个在线识别的答案,但我想要离线和更详细的相同

编辑:我将每个字符分区为具有固定数量的正方形的网格.现在我计划在每个网格块上执行特征提取,从而通过从左到右和从上到下移动来获得每个样本的一系列特征.

  1. 这是否代表HMM的足够"序列",即HMM是否能够猜测数据的时间变化,即使角色不是从左到右,从上到下绘制的?如果不建议替代方式.

  2. 我应该提供很多功能还是从一些功能开始?我怎么知道HMM是否表现不佳或者功能是否不好?我正在使用JAHMM.

  3. 提取笔划特征很困难,并且逻辑上不能与网格特征相结合?(因为HMM需要一些随机过程生成的序列)

ocr classification hidden-markov-models

6
推荐指数
1
解决办法
2677
查看次数

在GaussianHMM.fit([X])中对X感到困惑

使用此代码:

X = numpy.array(range(0,5))
model = GaussianHMM(n_components=3,covariance_type='full', n_iter=1000)
model.fit([X])
Run Code Online (Sandbox Code Playgroud)

我明白了

tuple index out of range 
self.n_features = obs[0].shape[1]
Run Code Online (Sandbox Code Playgroud)

那么你应该准确传递.fit()的是什么?元组中隐藏的状态和排放?如果是这样的话?文档不太有用.

我注意到它喜欢传递元组,因为这不会给出错误:

X = numpy.column_stack([range(0,5),range(0,5)])
model = GaussianHMM(n_components=3,covariance_type='full', n_iter=1000)
model.fit([X])
Run Code Online (Sandbox Code Playgroud)

编辑:

让我澄清一下,文档表明数组的正常性必须是:

类似阵列的观察序列列表(形状(n_i,n_features)).

这几乎表明您为每个样本传递一个元组,以二进制方式指示哪些观察结果存在.然而他们的例子表明不是:

# pack diff and volume for training
X = np.column_stack([diff, volume])
Run Code Online (Sandbox Code Playgroud)

因此混乱

python hidden-markov-models scikit-learn

6
推荐指数
1
解决办法
1527
查看次数

Mallet HMM 训练问题

目前,我正在为 Mallet 关于 HMM 的糟糕得可笑的文档而苦苦挣扎。我已经设法将数据导入到实例中(改编自 ImportExample.java 片段),我只是想知道如何使用它们来训练 HMM 模型。我首先创建了一个 HMM 实例,但我不确定是否去:

    HMM hmm = new HMM(instances.getDataAlphabet(), instances.getTargetAlphabet());
Run Code Online (Sandbox Code Playgroud)

或者像这样使用相同的数据字母两次:

    HMM hmm = new HMM(instances.getDataAlphabet(), instances.getDataAlphabet());
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,当我到达

    hmm.train(instances);
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

cc.mallet.types.FeatureVector 不能转换为 cc.mallet.types.FeatureVectorSequence

如果您能提供任何帮助,我将不胜感激。

干杯

java hidden-markov-models mallet

5
推荐指数
1
解决办法
1786
查看次数

Java中的维特比算法

我正在学习 coursera NLP 课程,第一个编程任务是构建 Viterbi 解码器。我想我真的快要完成它了,但是有一些我似乎无法追踪的难以捉摸的错误。这是我的代码:

http://pastie.org/private/ksmbns3gjctedu1zxrehw

http://pastie.org/private/ssv6tc8dwnamn2qegdvww

到目前为止,我已经调试了与“教学”相关的函数,所以我可以说算法的参数正在被正确估计。特别感兴趣的是 viterbi() 和 findW() 方法。我正在使用的算法的定义可以在这里找到:http : //www.cs.columbia.edu/~mcollins/hmms-spring2013.pdf第 18 页。

我很难理解的一件事是,当 K = {1, 2} 时,我应该如何更新特殊情况的反向指针(在我的情况下,这是 0 和 1,因为我是零-索引我的数组)分别在这些情况下我使用的参数是 q({TAGSET} | *, *) 和 q ({TAGSET} | *, {TAGSET})。

提示而不是勺子喂的答案也将受到高度赞赏!

java nlp viterbi hidden-markov-models

5
推荐指数
1
解决办法
6877
查看次数

手势/姿势识别的特征提取方法

我目前正在开发一个手语识别应用程序,我想使用隐马尔可夫模型作为分类阶段,这意味着我将对手势/姿势进行分类以获得相关的字母或单词。

我目前已经完成了检测手部的第一阶段。目前,我可以获得许多可用于机器学习阶段的参数(特征),例如:

  • 手的凸包
  • 凸面缺陷
  • 手的质心
  • 边界旋转的椭圆/矩形(例如获得旋转所需的任何角度)
  • 手的轮廓
  • 时刻(我不确定这些到底是什么)

这些都可以通过 openCv 来完成。

我的问题:一旦我拥有所有这些功能,我该如何执行“特征提取”阶段?即如果机器学习算法,在这种情况下 HMM 需要一组概率,我如何使用上述信息?

我的一个想法是创建一个特殊的数据结构,其中包含唯一标识每个手势的信息,但我如何将其提供给机器学习技术?(在本例中为隐马尔可夫模型)

任何人都可以指导我在这个特定阶段至少应该搜索什么,或者指导我展示我真正遇到的困难是什么?

opencv machine-learning gesture-recognition feature-extraction hidden-markov-models

5
推荐指数
1
解决办法
2556
查看次数

Scikit Learn Gaussian HMM:ValueError:startprob 的总和必须为 1.0

我目前正在使用 Scikit Learn,并且在尝试训练高斯 HMM 时遇到了以下问题:

文件“/Library/Python/2.7/site-packages/sklearn/hmm.py”,第443行,合适

self._do_mstep(stats, self.params)
Run Code Online (Sandbox Code Playgroud)

文件“/Library/Python/2.7/site-packages/sklearn/hmm.py”,第 798 行,在 _do_mstep 中

super(GaussianHMM, self)._do_mstep(stats, params)
Run Code Online (Sandbox Code Playgroud)

文件“/Library/Python/2.7/site-packages/sklearn/hmm.py”,第 580 行,在 _do_mstep 中

np.maximum(self.startprob_prior - 1.0 + stats['start'], 1e-20))
Run Code Online (Sandbox Code Playgroud)

文件“/Library/Python/2.7/site-packages/sklearn/hmm.py”,第 476 行,在 _set_startprob

raise ValueError('startprob must sum to 1.0')
Run Code Online (Sandbox Code Playgroud)

ValueError:startprob 的总和必须为 1.0

如果我消除了一些特征(每次观察少于 13 个特征),它仍然有效。我已经检查过所有输入都是有效的,并且每个训练示例只包含 numpy.float64s 的二维数组。关于出了什么问题的任何想法?谢谢!

python numpy python-2.7 hidden-markov-models scikit-learn

5
推荐指数
1
解决办法
2517
查看次数

小词汇量语音识别(约20字)

我目前正在为我的大学做一个项目。任务是编写语音识别系统,该系统将在后台运行在手机上,等待一些命令(例如 call 0 123 ...)。

这是 2 个月的项目,所以它不必非常准确。可接受的噪音量可能很小,并且单词将被片刻的沉默隔开。

我目前正在加载以 RAW 16 位 PCM 格式编码的示例字。将其拆分为块(每秒约 50 个)并在每个块上运行 FFT 以获得频谱。

需要解决的问题是:1)通过较长的录音并将其拆分为单词。2)找到最匹配的词

1)我正在考虑只检查一个接一个的块,如果我遇到几个具有更高人类语音频率的块,则认为该词已经开始。无论如何,我正在寻找可能对此有所帮助的资源。

2)这个接缝有点硬。是否有必要将 HMM 用于这样的系统,或者假设词汇量如此之小(20 个单词),是否有更简单的方法?

编辑:该项目的重点是我自己编写系统,所以我不能使用像 Sphinx 或 HTK 这样的现成库。

问候, 卡罗尔

c++ speech-recognition fft speech-to-text hidden-markov-models

5
推荐指数
1
解决办法
1282
查看次数

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

我尝试使用来自 GitHub 的 hmmlearn来运行二进制隐藏马尔可夫模型。这不起作用:

import hmmlearn.hmm as hmm
transmat = 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
# fails
h.fit([0, 0, 1, 0, 0])
# fails
h.decode([0, 0, 1, 0, 0])
print h
Run Code Online (Sandbox Code Playgroud)

我收到此错误:

ValueError:无法连接零维数组

使用此模块的正确方法是什么?注意我使用的是与 sklearn 分离的 hmmlearn 版本,因为显然 sklearn 不再维护 hmmlearn。

python machine-learning time-series hidden-markov-models hmmlearn

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