期望最大化(Expectation Maximization)算法简介和Python代码实现

期望最大化(EM)算法被广泛用于估计不同统计模型的参数。它是一种迭代算法,可以将一个困难的优化问题分解为几个简单的优化问题。在本文中将通过几个简单的示例解释它是如何工作的。

这个算法最流行的例子(互联网上讨论最多的)可能来自这篇论文(http://www.nature.com/nbt/journal/v26/n8/full/nbt1406.html )。这是一个非常简单的例子,所以我们也从这里开始。

假设我们有两枚硬币(硬币 1 和硬币 2),正面朝上的概率不同。我们选择其中一枚硬币,翻转 m=10 并记录正面的数量。假设我们重复这个实验 n=5 次。我们的任务是确定每个硬币正面朝上的概率。我们有:

首先假设我们知道每个实验中使用了哪种硬币。在这种情况下,有完整的信息,可以使用最大似然估计 (MLE) 技术轻松求解 p_1 和 p_2。首先计算似然函数并取其对数(因为最大化对数似然函数更容易)。由于我们有 n 个独立实验,似然函数只是在 x_i 处评估的个体概率质量函数 (PMF) 的乘积(数字是实验 i 中的正面)。

完整文章:

https://avoid.overfit.cn/post/f618e5e3c5304fceb36abbdec8816107

现在我们需要最大化关于概率 p_1 和 p_2 的对数似然函数。它可以在数值上或解析上完成。我将演示这两种方法。首先让我们尝试解决它,可以分别求解 p_1 和 p_2。

对 p_1 取对数似然函数的导数,将其设置为零并求解 p_1。当区分对数似然函数时,涉及 p_2 的项的导数将等于 0。所以我们只使用涉及硬币 1 的实验数据。

得到的答案很直观:它是我们在硬币 1 的实验中得到正面的总数除以硬币 1 的实验中的翻转总数。p_2 的计算将是类似的。

现在我将在 Python 中实现这个解决方案。

posted @   deephub  阅读(98)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示