期望最大化(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 中实现这个解决方案。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)