【发布时间】:2018-06-26 22:03:35
【问题描述】:
所以我在机器学习方面有点像业余爱好者,我正在尝试编写 Baum Welch 算法,这是 EM 算法的隐马尔可夫模型的推导。在我的程序中,我正在使用新模型中每个观察序列的概率测试收敛性,然后在新模型小于或等于旧模型时终止。但是,当我运行该算法时,它似乎会收敛一些,并且给出的结果比随机的要好得多,但是 当收敛时它会在最后一次迭代中下降。这是错误的迹象还是我做错了什么?
在我看来,我应该使用 每个观察概率的对数总和 来进行比较,因为这似乎是我正在最大化的函数。但是,我读到的论文说要使用观察 (https://www.cs.utah.edu/~piyush/teaching/EM_algorithm.pdf) 的概率总和的日志(我很确定它与概率的总和相同)。
我在另一个项目中解决了这个问题,在该项目中,我使用前馈神经网络实现了反向传播,方法是实现一个具有预设时期数的 for 循环,而不是一个 while 循环,其中新迭代的条件严格大于但我我想知道这是否是一种不好的做法。
我的代码是https://github.com/icantrell/Natural-Language-Processing 在 nlp.py 文件中。
任何建议将不胜感激。 谢谢。
【问题讨论】:
标签: python algorithm machine-learning nlp expectation-maximization