前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >EM算法 实例讲解「建议收藏」

EM算法 实例讲解「建议收藏」

作者头像
全栈程序员站长
发布2022-06-28 13:46:02
1.2K0
发布2022-06-28 13:46:02
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

第一次接触EM算法,是在完成半隐马尔科夫算法大作业时。我先在网上下载了两份Baum-Welch算法的代码,通过复制粘贴,修修补补,用java实现了HMM算法(应用是韦小宝掷两种骰子的问题)。然后,参考有关半隐马尔科夫算法的论文,照着论文中的公式修改隐马尔科夫算法,完成了大作业。现在回想起来,就隐隐约约记得有一大堆公式。最近,我看到一篇很好的文章,对EM算法的计算有了进一步的了解

文章中有个例子,能让人快速了解EM算法的使用方法,下图是例子的示意图,图b是EM算法的实例,图a是让我们预热的。

EM算法 实例讲解「建议收藏」
EM算法 实例讲解「建议收藏」

这是一个抛硬币的例子,H表示正面向上,T表示反面向上,参数θ表示正面朝上的概率。硬币有两个,A和B,硬币是有偏的。本次实验总共做了5组,每组随机选一个硬币,连续抛10次。如果知道每次抛的是哪个硬币,那么计算参数θ就非常简单了,如上图所示。

如果不知道每次抛的是哪个硬币呢?那么,我们就需要用EM算法,基本步骤为:1、给θA和θB一个初始值;2、(E-step)估计每组实验是硬币A的概率(本组实验是硬币B的概率=1-本组实验是硬币A的概率)。分别计算每组实验中,选择A硬币且正面朝上次数的期望值,选择B硬币且正面朝上次数的期望值;3、(M-step)利用第三步求得的期望值重新计算θA和θB;4、当迭代到一定次数,或者算法收敛到一定精度,结束算法,否则,回到第2步。

EM算法 实例讲解「建议收藏」
EM算法 实例讲解「建议收藏」

稍微解释一下上图的计算过程。初始值θA=0.6,θB=0.5。

图中的0.45是怎么得来的呢?由两个硬币的初始值0.6和0.5,容易得出投掷出5正5反的概率是pA=C(10,5)*(0.6^5)*(0.4^5),pB=C(10,5)*(0.5^5)*(0.5^5), pA/(pA+pB)=0.449, 0.45就是0.449近似而来的,表示第一组实验选择的硬币是A的概率为0.45。图中的2.2H,2.2T是怎么得来的呢? 0.449 * 5H = 2.2H ,0.449 * 5T = 2.2T ,表示第一组实验选择A硬币且正面朝上次数的期望值是2.2。其他的值依次类推。

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/150554.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档