【大道至简】机器学习算法之EM算法(Expectation Maximization Algorithm)详解(附代码)---通俗理解EM算法。

☕️ 本文来自专栏:大道至简之机器学习系列专栏

🍃本专栏往期文章:逻辑回归(Logistic Regression)详解(附代码)---大道至简之机器学习算法系列——非常通俗易懂!_尚拙谨言的博客-CSDN博客_逻辑回归代码

❤️各位小伙伴们关注我的大道至简之机器学习系列专栏,一起学习各大机器学习算法

❤️还有更多精彩文章(NLP、热词挖掘、经验分享、技术实战等),持续更新中……欢迎关注我,主页:https://blog.csdn.net/qq_36583400,记得点赞+收藏哦!

📢个人GitHub地址:fujingnan (fujingnan) · GitHub

目录

总结

一、基础的基础

1. 数学期望(以下简称“期望”)

2. 最大似然估计

3. Jensen不等式

 二、EM算法推导

1. 从特殊到一般

2. EM算法的推导

3. EM算法总结

 三、EM算法在高斯混合模型中的应用(重要)

四、Python代码实现

五、总结


看到上面的表情了吗?没错,我的心情……为啥呢?因为我今天要讲一讲这个曾经耗费我将近两个月的时间去理解的EM(Emoji Melancholy)算法。先说在前面,该算法确实有点晦涩难懂,小伙伴们如果一时半会儿理解不了没关系,千万不要EM起来,我看网上太多大佬对解释这个算法都显得似乎轻而易举,很是佩服,小弟并不知道他们是如何做到理解的如此轻松的,大佬的世界咱不懂哎~

我尝试着并非抛几个公式,照着书上解释一通来写这篇博客,尽量用自己的理解来写,如果存在有误之处,还请大佬们提出指正,不胜感激!

通俗讲,EM算法它是机器学习在一些实际场景中能够实现的一种基础数学方法,它叫期望最大化算法,目的是能够求解带有隐含变量的最大似然值的问题。就好比我们要解决连续凸函数的最大值问题,那么我们就要学会微积分。因此,与其说EM算法是一种机器学习算法,不如说它是一种能够应用在一些机器学习算法求解问题上的一种基础数学工具。对于EM算法,本章想重点介绍一下它在高斯混合模型学习中的应用。但在这之前,我想先和大家过一遍EM算法的基础。

总结

文档撰写习惯,先抛出总结:

  • EM算法的具体步骤:

(1)给参数θ即第0步赋初值\theta^{(0)}

(2)E步:如果是第一轮迭代,那么令θ=\theta^{(0)}来计算Q函数;如果是>1轮迭代,则θ的值由上一次M步计算出的θ值决定。由于E步时θ已知,所以只需要计算Q,公式如下: 

Q^{(t)}(z^{(i)})=p(z^{(i)}|x^{(i)};\theta^{(t)})

也就是给定θ和已知的观测数据x的条件下,求一下隐变量z的条件概率。 

(3)M步: 根据E步计算出来的Q,按如下公式计算更新θ:

\theta^{(t+1)}=J(\theta^{(t+1)})=\underset{\theta }{argmax}\sum_{i}\sum_{z^{(i)}}Q_{i}^{(t)}(z^{(i)})\log \frac{p(x^{(i)},z^{(i)};\theta^{(t)})}{Q_{i}^{(t)}(z^{(i)})}

也就是固定Q(z也固定)和已知的观测数据x,算一下新的θ。

 (4)重复(3)和(4)直至收敛。

  • 高斯混合模型的EM算法步骤:

假设随机变量X是由K个高斯分布混合而成,各个高斯分布的概率为\phi_{1}, \phi_{2}, ..., \phi_{K},第i个高斯分布的均值为\mu_{i},方差为\sigma_{i}。我们观测到随机变量X的一系列样本值为x_{1}, x_{2}, ..., x_{n} ,计算如下:

第一步:给φ,μ,σ赋初值,开启迭代,高斯混合模型的φ,μ,σ有多个,就分别赋初值;

第二步:E步。如果是首轮迭代,那么φ,μ,σ分别为我们给定的初值;否则φ,μ,σ取决于上一轮迭代的值。有了φ,μ,σ的值,我们按照如下公式计算Q函数:

\begin{aligned} Q_{i}(z^{(i)}=k)=\frac{\phi_{k}\cdot \frac{1}{\sqrt{2\pi}\sigma_{k}}\exp [-\frac{(x^{(i)}-\mu_{k})^{2}}{2\sigma_{k}^{2}}]}{\sum_{k=1}^{K}\phi_{k}\cdot \frac{1}{\sqrt{2\pi}\sigma_{k}}\exp [-\frac{(x^{(i)}-\mu_{k})^{2}}{2\sigma_{k}^{2}}]} \end{aligned}

其中,φ,σ,μ,x均已知,代入即可,i=1,2,...,N;k=1,2,...,K

第三步:M步。根据计算出来的Q,套进以下公式算出高斯混合模型的各个参数:

\begin{aligned} \mu_{k}&=\frac{\sum_{i=1}^{N} Q_{k}^{(i)}x^{(i)}}{N_{k}}\\ \sigma_{k}&=\frac{\sum_{i=1}^{N}Q_{k}^{(i)}(x^{(i)}-\mu_{(k)})(x^{(i)}-\mu_{k})^T}{N_{k}}\\ \phi_{k}&=\frac{\sum_{i=1}^{N}Q_{k}^{(i)}}{N}\\ N_{k}&=\sum_{i=1}^{N}Q_{k}^{(i)} \end{aligned}

重复2~3步,直至收敛。 

好了,正文开始……

一、基础的基础

既然说EM算法是基础,那么它必然也有基础,这一节先介绍几个学习EM算法需要知道的基础。我们先从算法的名字入手:期望最大值算法。

1. 数学期望(以下简称“期望”)

百度百科上说:“数学期望(mathematic expectation)(或均值,亦简称期望)是试验中每次可能结果的概率乘以其结果的总和。”

瞅瞅上面这句话,什么试验?其实就是我们日常生活中发生的一些同类事件,比如买彩票事件、抛硬币事件等;所以百科上这句鸟话啥意思?事情还得从盘古开天辟地时的一场赌局说起,事情是这样的:

甲乙两个人赌博,他们两人获胜的机率相等,比赛规则是先胜三局者为赢家,一共进行五局,赢家可以获得100法郎的奖励。当比赛进行到第四局的时候,甲胜了两局,乙胜了一局,这时由于某些原因中止了比赛,那么如何分配这100法郎才比较公平?

我们简单算一下:因为甲输掉后两局的可能性只有(1/2)×(1/2)=1/4,也就是说甲赢得后两局或后两局中任意赢一局的概率为1-(1/4)=3/4,甲有75%的期望获得100法郎;而乙期望赢得100法郎就得在后两局均击败甲,乙连续赢得后两局的概率为(1/2)*(1/2)=1/4,即乙有25%的期望获得100法郎奖金。

可见,虽然不能再进行比赛,但依据上述可能性推断,甲乙双方最终胜利的客观期望分别为75%和25%,因此甲应分得奖金的100*75%=75(法郎),乙应分得奖金的的100×25%=25(法郎)。这个故事里出现了“期望”这个词,数学期望由此而来。

从上面的例子可以十分通俗的这么理解:数学期望就是一个事件可能获得的所有结果被其获得相应结果的可能性(概率)“降价(加权)”后,求得的和,作为该事件的整体期望结果,也就是用一个数来表示一件事获得可能结果是啥。

这里需要注意的是,每件事获得的结果都必须赋予实际的意义,且需要数字化表示,否则期望是无法计算的。又因为每个人赋予的实际意义和数字化表示都不相同,所以如果没有规定统一,则每个人计算出来的期望都有可能不同,例如上述的100法郎的奖励,你也可以规定是200法郎,那么计算的结果就会不一样,但这并不影响数学期望所表示的数学意义。

假设一个随机事件X ,对于离散型数值的数学期望为:

E(X)=\sum_{i=1}^{n}=x_{i}\cdot p_{i}

,pi为xi发生的概率值。

对于连续型数值的数学期望为:

E(X)=\int_{-\infty }^{\infty }x\cdot f(x)dx

,f(x)为x的概率密度函数。

关于数学期望还有呢太多细节,不是本文介绍重点,大家可自行查阅。这里只做一个宏观解释。

2. 最大似然估计

“期望最大值”的第二部分就是那个“最大”,“最大”蕴含着“最大似然估计”方法,只不过在EM算法里,最大似然估计是含有隐变量的最大似然估计,这个在后面说,这里先说说什么是最大似然估计。

通常的,当我们对某个事件做多次的一系列试验后,在大数定律下(对某事件做了无数多次试验发生的规律),我们统计出现各种试验结果的概率,那么会发现,这一事件的试验会大概率稳定在某种形式的结果。比如抛硬币,抛了无数多次后统计,会发现正面向上的概率和反面向上的概率基本都是0.5。而我们通常的试验,都会有一定的未知参数,那么最大似然参数估计就是要估计出能使这种出现最大概率结果的参数值,比如抛硬币的力度,试验者的年龄等。已知某个参数能使这个样本出现的概率最大,我们当然不会再去选择其他小概率的样本,所以干脆就把这个参数作为估计的真实值。那么这个需要估计的未知参数该如何理解呢?

举个例子:

已知一批往年下雨的数据样本,是否下雨是由某些气象指标控制,如参数θ表示空气的湿度,L(x; θ) 就表示在湿度参数θ下下雨的可能性,参数θ可以取值\theta_{1},\theta_{2}...\theta_{n},每个参数\theta_{i}会得到对应的似然函数值, 如果某个\theta_{i}似然函数值大,代表该样本在这个参数下发生的可能性更大些 ,所以把称为“似然函数”,用来表示参数\theta_{i}取值和样本数据的关联程度。而求解似然函数的过程,是已知某个参数θ使得似然函数值最大,反求θ。

最大似然估计分为离散型随机变量和连续型随机变量两种。离散型随机变量是一系列独立同分布的随机事件在某个或某些未知参数θ的参与下,其得到最大概率值下,对参数θ的估计;连续型随机变量是指一系列具有连续特征的随机变量在某个或某些未知参数θ的参与下,其得到最大概率密度值下,对参数θ的估计。

通常,由于计算最大概率值时,需要用到概率连乘,这将在计算上带来很大的麻烦,因此,我们在求解最大似然值时,往往采用对数方法进行࿰

### 回答1: GMM-EM算法的伪代码:// 迭代k次 for (k=0; k<K; k++) { // E步骤 // 计算每个样本属于每个模型的概率 for (i=0; i<N; i++) { for (j=0; j<M; j++) { p[i][j] = pi[j]*Gaussian(x[i],mu[j],sigma[j]); } } // 计算每个样本属于每个模型的期望值 for (i=0; i<N; i++) { for (j=0; j<M; j++) { q[i][j] = p[i][j]/sigma[j]; } } // M步骤 // 更新模型参数 for (j=0; j<M; j++) { pi[j] = pi[j] + q[i][j]; mu[j] = mu[j] + q[i][j]*x[i]; sigma[j] = sigma[j] + q[i][j]*(x[i] - mu[j])*(x[i] - mu[j]); } } ### 回答2: GMM-EM(高斯混合模型期望最大化)算法是一种用于估计高斯混合模型参数的迭代优化算法。下面是GMM-EM算法的伪代码: 输入:观测数据X,高斯分量个数K 输出:高斯混合模型的参数 1. 初始化高斯混合模型参数: - 初始化每个高斯分量的均值向量mu_k,协方差矩阵sigma_k和混合系数pi_k - 使用随机值或者其他预设的初始值进行初始化 2. 迭代优化: - 重复以下步骤,直到收敛: 1. Expectation 步骤: - 计算每个样本属于每个高斯分量的后验概率gamma(z_{nk}),即样本x_n由高斯分量k生成的概率 - 使用当前的参数值计算gamma(z_{nk}),即根据当前参数估计后验概率 2. Maximization 步骤: - 更新均值向量mu_k: - 对于每个高斯分量k,计算新的均值mu_k: - mu_k = (sum_n(gamma(z_{nk})*x_n)) / (sum_n(gamma(z_{nk}))) 其中,sum_n表示对所有样本求和 - 更新协方差矩阵sigma_k: - 对于每个高斯分量k,计算新的协方差矩阵sigma_k: - sigma_k = (sum_n(gamma(z_{nk})*(x_n - mu_k)*(x_n - mu_k).T)) / (sum_n(gamma(z_{nk}))) 其中,sum_n表示对所有样本求和,.T表示矩阵的转置操作 - 更新混合系数pi_k: - 对于每个高斯分量k,计算新的混合系数pi_k: - pi_k = sum_n(gamma(z_{nk})) / N 其中,sum_n表示对所有样本求和,N为样本总数 3. 返回最终的高斯混合模型参数 GMM-EM算法通过交替进行Expectation步骤和Maximization步骤,迭代地优化高斯混合模型的参数,直到收敛到最优参数。
评论 39
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五点钟科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值