我正在尝试使用 Viterbi 算法在 HMM 上找到最可能的路径(即状态序列)。但是,我不知道转换和发射矩阵,我需要从观察(数据)中估计。
要估计这些矩阵,我应该使用哪种算法:Baum-Welch 或 Viterbi 训练算法?为什么?
如果我应该使用维特比训练算法,谁能给我一个好的伪代码(不容易找到)?
我正在尝试使用 Viterbi 算法在 HMM 上找到最可能的路径(即状态序列)。但是,我不知道转换和发射矩阵,我需要从观察(数据)中估计。
要估计这些矩阵,我应该使用哪种算法:Baum-Welch 或 Viterbi 训练算法?为什么?
如果我应该使用维特比训练算法,谁能给我一个好的伪代码(不容易找到)?
给定足够的资源,您可能应该使用 Baum-Welch(向前-向后)算法而不是 Viterbi训练算法(又名分段 k 均值算法),这是一种替代参数估计过程,牺牲了 Baum-Welch 的一些通用性以提高计算效率. 一般来说,Baum-Welch 算法会给出导致更好性能的参数,尽管在某些情况下情况并非如此。这是一个很好的比较研究。
此外,请注意您应该使用 Baum-Welch 算法来估计模型的参数。这使用类似于 EM 算法的方法设置发射概率和传输概率。训练 HMM 后,您将使用 Viterbi解码算法来计算最有可能产生观察结果的状态序列。
参考方面,我会推荐Speech and Language Processing、Artificial Intelligence a Modern Approach或这篇论文
来自http://nlp.stanford.edu/courses/lsa352/lsa352.lec7.6up.pdf:
与 Baum-Welch 相比,Viterbi Training 是:
- 快多了
- 但效果不太好
- 但这种权衡往往是值得的。
一些比较研究:
罗德里格斯、路易斯·哈维尔和伊内斯·托雷斯。“用于阅读和自发语音识别的 Baum-Welch 和 Viterbi 训练算法的比较研究。” 在伊比利亚模式识别和图像分析会议上,第 847-857 页。施普林格柏林海德堡,2003 年。
在 Statistics Stack Exchange: Differences between Baum-Welch and Viterbi training上也提出了同样的问题。
你必须通过鲍姆韦尔奇算法找出隐藏的马尔可夫模型参数。baum welch 使用前向和后向算法来找出 hmm 参数。
我有一个 python 中 baum welch 算法代码的链接,只需检查一下即可: https ://jyyuan.wordpress.com/2014/01/28/baum-welch-algorithm-finding-parameters-for-our-hmm/