EM算法原理解释及公式推导

本文深入解析EM算法,探讨其在处理带有隐含变量的数据集时的极大似然估计应用,通过案例详细阐述算法流程及推导过程。

本文参考的是 人人都懂EM算法 - August的文章 - 知乎 这篇文章

目录

一、极大似然概述

二、EM算法

2.1 EM算法描述

2.2 EM公式推导

三、EM算法案例 


一、极大似然概述

假设我们需要调查我们学校学生的身高分布。我们先假设学校所有学生的身高服从正态分布 N(\mu,\sigma^2) 。(注意:极大似然估计的前提一定是要假设数据总体的分布,如果不知道数据分布,是无法使用极大似然估计的),这个分布的均值 \mu 和方差 \sigma^2 未知,如果我们估计出这两个参数,那我们就得到了最终的结果。那么怎样估计这两个参数呢?

学校的学生这么多,我们不可能挨个统计吧?这时候我们需要用到概率统计的思想,也就是抽样,根据样本估算总体。假设我们随机抽到了 200 个人(也就是 200 个身高的样本数据,为了方便表示,下面“人”的意思就是对应的身高)。然后统计抽样这 200 个人的身高。根据这 200 个人的身高估计均值 \mu 和方差 \sigma^2

用数学的语言来说就是:为了统计学校学生的身高分布,我们独立地按照概率密度 p(x|\theta) 抽取了 200 个(身高),组成样本集 X=x_1,x_2,...,x_N(其中 x_i 表示抽到的第 i 个人的身高,这里 N 就是 200,表示样本个数),我们想通过样本集 X 来估计出总体的未知参数 \theta 。这里概率密度 p(x|\theta) 服从高斯分布 N(\mu,\sigma^2) ,其中的未知参数是 \theta

那么问题来了怎样估算参数 \theta 呢?

问题一:抽到这 200 个人的概率是多少呢?

由于每个样本都是独立地从 p(x|\theta) 中抽取的,换句话说这 200 个学生随便捉的,他们之间是没有关系的,即他们之间是相互独立的。假如抽到学生 A(的身高)的概率是 p(x_A|\theta)抽到学生B的概率是 p(x_B|\theta) ,那么同时抽到男生 A 和男生 B 的概率是p(x_A|\theta) * p(x_B|\theta),同理,我同时抽到这 200 个学生的概率就是他们各自概率的乘积了,即为他们的联合概率,用下式表示:

n 为抽取的样本的个数,本例中 n=200 ,这个概率反映了,在概率密度函数的参数是 \theta 时,得到 X 这组样本的概率。上式中等式右侧只有 \theta 是未知数,所以 L 是 \theta 的函数。

这个函数反映的是在不同的参数 \theta 取值下,取得当前这个样本集的可能性,因此称为参数 \theta 相对于样本集 X 的似然函数(likelihood function),记为 L(\theta)

对 L 取对数,将其变成连加的,称为对数似然函数,如下式:

Q:这里为什么要取对数?

  • 取对数之后累积变为累和,求导更加方便
  • 概率累积会出现数值非常小的情况,比如1e-30,由于计算机的精度是有限的,无法识别这一类数据,取对数之后,更易于计算机的识别(1e-30以10为底取对数后便得到-30)。

问题二:学校那么多学生,为什么就恰好抽到了这 200 个人 ( 身高) 呢?

在学校那么学生中,我一抽就抽到这 200 个学生(身高),而不是其他人,那是不是表示在整个学校中,这 200 个人(的身高)出现的概率极大啊,也就是其对应的似然函数 L(\theta) 极大,即

\hat{\theta} 这个叫做 \theta 的极大似然估计量,即为我们所求的值。

问题三:那么怎么极大似然函数?

L(\theta)  对所有参数的偏导数,然后让这些偏导数为 0,假设有 n 个参数,就有 n 个方程组成的方程组,那么方程组的解就是似然函数的极值点了,从而得到对应的 \theta 了。

极大似然估计总结

极大似然估计你可以把它看作是一个反推。多数情况下我们是根据已知条件来推算结果,而极大似然估计是已经知道了结果,然后寻求使该结果出现的可能性极大的条件,以此作为估计值。

比如说,

  • 假如一个学校的学生男女比例为 9:1 (条件),那么你可以推出,你在这个学校里更大可能性遇到的是男生 (结果);
  • 假如你不知道那女比例,你走在路上,碰到100个人,发现男生就有90个 (结果),这时候你可以推断这个学校的男女比例更有可能为 9:1 (条件),这就是极大似然估计。

极大似然估计,只是一种概率论在统计学的应用,它是参数估计的方法之一。说的是已知某个随机样本满足某种概率分布,但是其中具体的参数不清楚,通过若干次试验,观察其结果,利用结果推出参数的大概值。

极大似然估计是建立在这样的思想上:已知某个参数能使这个样本出

在高斯混合模型(Gaussian Mixture Model, GMM)中,EM算法用于估计模型参数,并通过概率方法实现聚类。EM算法的核心思想是通过迭代优化来最大化数据的似然函数,尤其适用于含有隐变量的问题。GMM中的隐变量表示每个样本属于各个高斯分布的概率。 --- ### 数学原理推导 #### 1. 模型定义 假设数据 $ x_1, x_2, \dots, x_N $ 来自 $ K $ 个高斯分布的混合,其概率密度函数为: $$ p(x_i | \theta) = \sum_{k=1}^K \alpha_k \cdot \mathcal{N}(x_i | \mu_k, \Sigma_k) $$ 其中: - $ \alpha_k $ 是第 $ k $ 个高斯分布的权重系数,满足 $ \sum_{k=1}^K \alpha_k = 1 $ - $ \mathcal{N}(x_i | \mu_k, \Sigma_k) $ 表示均值为 $ \mu_k $、协方差矩阵为 $ \Sigma_k $ 的高斯分布 [^2] #### 2. 隐变量引入 对于每个观测数据 $ x_i $,引入一个隐变量 $ z_i $,表示该样本来自哪个高斯分布。$ z_i $ 是一个维度为 $ K $ 的向量,且只有一个元素为1,其余为0,即采用 one-hot 编码形式。 此时联合分布为: $$ p(x_i, z_i | \theta) = p(z_i | \alpha) \cdot p(x_i | z_i, \theta) $$ 其中: - $ p(z_i | \alpha) $ 是类别分布,由权重系数决定。 - $ p(x_i | z_i, \theta) $ 是条件高斯分布 [^4] #### 3. EM算法步骤 ##### E步:计算后验概率 在E步中,固定当前的参数估计值 $ \theta^{(t)} $,计算每个样本 $ x_i $ 属于第 $ k $ 个高斯分布的后验概率: $$ \gamma_{ik}^{(t)} = p(z_{ik}=1 | x_i, \theta^{(t)}) = \frac{\alpha_k^{(t)} \cdot \mathcal{N}(x_i | \mu_k^{(t)}, \Sigma_k^{(t)})}{\sum_{j=1}^K \alpha_j^{(t)} \cdot \mathcal{N}(x_i | \mu_j^{(t)}, \Sigma_j^{(t)})} $$ 此步骤本质上是对隐变量进行期望估计,即“期望”步骤 [^1] ##### M步:更新参数 在M步中,利用E步得到的后验概率 $ \gamma_{ik} $ 更新模型参数: - **权重更新**: $$ \alpha_k^{(t+1)} = \frac{1}{N} \sum_{i=1}^N \gamma_{ik}^{(t)} $$ - **均值更新**: $$ \mu_k^{(t+1)} = \frac{\sum_{i=1}^N \gamma_{ik}^{(t)} x_i}{\sum_{i=1}^N \gamma_{ik}^{(t)}} $$ - **协方差矩阵更新**: $$ \Sigma_k^{(t+1)} = \frac{\sum_{i=1}^N \gamma_{ik}^{(t)} (x_i - \mu_k^{(t+1)})(x_i - \mu_k^{(t+1)})^T}{\sum_{i=1}^N \gamma_{ik}^{(t)}} $$ 此步骤通过最大化期望似然函数来更新参数,即“最大化”步骤 [^3] #### 4. 收敛判断 重复E步和M步,直到参数变化小于某个阈值或达到最大迭代次数。 --- ### 示例代码(Python) 以下是一个基于 `scikit-learn` 库实现GMM与EM算法的简单示例: ```python from sklearn.mixture import GaussianMixture import numpy as np # 生成二维数据点 np.random.seed(0) X = np.concatenate([np.random.normal(loc=[0, 0], scale=1, size=(300, 2)), np.random.normal(loc=[5, 5], scale=1, size=(300, 2))]) # 初始化GMM模型 gmm = GaussianMixture(n_components=2, random_state=0) # 拟合数据 gmm.fit(X) # 输出参数 print("权重系数:", gmm.weights_) print("均值向量:", gmm.means_) print("协方差矩阵:", gmm.covariances_) ``` --- ###
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值