EM算法及代码

一、算法简介。

EM算法全称为Expectation Maximization,即期望极大算法,是一种用于处理含有隐变量(hidden variable)的概率模型参数的极大似然估计,或极大后验概率估计。EM算法是一种迭代算法,每一次迭代可分为两步:E步,求期望(Expectation);M步,求极大(Maximization)。

二、算法步骤。

引用于PRML。

在这里插入图片描述

三、个人总结。

EM算法是求含有潜变量的模型参数的方法。因为传统的极大似然估计不能解决含有隐变量的模型,所以需要消除隐变量。这里我们采用求期望的方式去消除隐变量,是因为可以将似然函数表达式拆分为期望和KL散度的和。当KL散度为0时,期望与似然函数相等,最大化期望也是最大化似然函数。这类似于变分推断的理念。

附录:李航《统计学习方法》第9章习题第3题实现代码。(该代码的最终收敛结果取决于参数初始值的设置)

#  Statistical Learning Method Chapter 9 Exercise 9.3
#  Question description: Try to estimat
  • 3
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
由于EM算法是一种通用的统计算法,其代码的实现方式也因问题而异。以下是一个简单的例子,用于说明如何使用EM算法来估计两个高斯分布的参数。 假设我们有两个高斯分布,其均值和方差未知,我们希望通过观察一些样本来估计它们的参数。我们可以使用EM算法来实现这个目标。 首先,我们生成一些样本: mu1 = 1; sigma1 = 2; mu2 = 4; sigma2 = 1; n1 = 100; n2 = 150; x1 = mu1 + sigma1 * randn(n1, 1); x2 = mu2 + sigma2 * randn(n2, 1); x = [x1; x2]; 接下来,我们初始化两个高斯分布的参数: mu1_hat = 1; sigma1_hat = 1; mu2_hat = 3; sigma2_hat = 1; 然后,我们开始迭代,直到算法收敛为止: while true % E step p1 = normpdf(x, mu1_hat, sigma1_hat); p2 = normpdf(x, mu2_hat, sigma2_hat); w1 = p1 ./ (p1 + p2); w2 = p2 ./ (p1 + p2); % M step mu1_hat_new = sum(w1 .* x) / sum(w1); sigma1_hat_new = sqrt(sum(w1 .* (x - mu1_hat_new).^2) / sum(w1)); mu2_hat_new = sum(w2 .* x) / sum(w2); sigma2_hat_new = sqrt(sum(w2 .* (x - mu2_hat_new).^2) / sum(w2)); % check for convergence if abs(mu1_hat_new - mu1_hat) < 1e-6 && abs(sigma1_hat_new - sigma1_hat) < 1e-6 && ... abs(mu2_hat_new - mu2_hat) < 1e-6 && abs(sigma2_hat_new - sigma2_hat) < 1e-6 break; end % update parameters mu1_hat = mu1_hat_new; sigma1_hat = sigma1_hat_new; mu2_hat = mu2_hat_new; sigma2_hat = sigma2_hat_new; end 最后,我们可以输出估计出的参数: fprintf('mu1_hat = %f\n', mu1_hat); fprintf('sigma1_hat = %f\n', sigma1_hat); fprintf('mu2_hat = %f\n', mu2_hat); fprintf('sigma2_hat = %f\n', sigma2_hat); 这段代码实现了一个简单的二元高斯分布的EM算法,以估计其参数。它可以很容易地推广到更多高斯分布或其他类型的分布。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值