当前位置:   article > 正文

EM求解高斯混合模型GMM 原理+公式推导+代码_使用em算法估计高斯混合模型参数0的推导过程。

使用em算法估计高斯混合模型参数0的推导过程。

1 简介

EM(Expectation-Maximum)算法也称期望最大化算法,它是为了解决在方程无法获得解析解的情况下,通过迭代给出数值解。

核心:EM算法是一种迭代算法,用于含有隐变量的概率模型参数的极大似然估计(因此在往下面看之前,我希望你对贝叶斯的基本理论有所了解)

2 极大似然估计

(1)问题背景
我们要去调查全校学生的身高分布,因此分别随机抽取男生、女生各100人,总共200人(假设全校的男生、女生一样多,如果不一样多,那就还需要根据男女比例进行抽取,但这并不是我们研究的重点)。我们想要去获取男生的身高分布
(2)问题假设
① 男生、女生的身高符合高斯正态分布(对于非高斯问题,则需要建模处理,它不是统计学科要解决的问题)
② 男生、女生的身高都是独立同分布( i.i.d )
(3)模型建立
现在我们已经有了一堆数据 X = { x 1 , x 2 , . . . , x n {x_1,x_2,...,x_n} x1,x2,...,xn} ,其中 x i x_i xi表示第i个男生的身高,n为男生的个数。待估参数为 θ = \theta= θ={ μ , σ {\mu ,\sigma } μ,σ} 。
我们从当前全校男生中抽取一个同学A,其身高为 y A y_A yA的概率可以记为 P ( x A ∣ θ ) P(x_A \mid \theta) P(xAθ)。那么从全校男生中抽取100个同学,其身高为上述数据集合Y的概率可以用下列式子表示: L ( θ ) = L ( x 1 , ⋯   , x n ; θ ) = ∏ i = 1 n p ( x i ; θ ) , θ ∈ Θ L(\theta)=L\left(x_1, \cdots, x_n ; \theta\right)=\prod_{i=1}^n p\left(x_i ; \theta\right), \theta \in \Theta L(θ)=L(x1,,xn;θ)=i=1np(xi;θ),θΘ
上述式子反应了,在概率密度函数的参数是θ时,得到X这组样本的概率。上述式子中只有 θ 是未知的,因此称为参数θ的似然函数 L ( θ ) L(\theta) L(θ) 。我们的目标就是寻找出最优的 θ \theta θ,使得 L ( θ ) L(\theta) L(θ) 的数值最大,即:找到一个高斯分布,使得我随机抽100人,刚好就是上面的100个男生的概率最大。θ的最大似然估计量记为 θ ^ = a r g m a x L ( θ ) \hat{\theta}=argmax L(\theta) θ^=argmaxL(θ)
为便于分析,我们将 L ( θ ) L(\theta) L(θ)取其对数,即:
ln ⁡ L ( θ ) = log ⁡ ∏ i = 1 n p ( x i ; θ ) = ∑ i = 1 n log ⁡ p ( x i ; θ ) \ln L(\theta)=\log \prod_{i=1}^n p\left(x_i ; \theta\right)=\sum_{i=1}^n \log p\left(x_i ; \theta\right) lnL(θ)=logi=1np(xi;θ)=i=1nlogp(xi;θ)
由于p是高斯分布的概率密度函数(PDF),取对数后exp的指数会变为相加项。对其求导,令导数为0,得到似然方程;解似然方程即可得到 θ M L E \theta_{MLE} θMLE,即 θ \theta θ最优估计。

3 EM算法推导

对于参数为θ且含有隐变量Z的概率模型,进行n次抽样。假设随机变量 x x x 的观察值为 X X X={ x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn},隐变量 Z Z Z的m个可能的取值为 Z Z Z={ z 1 , z 2 , . . . , z m z_1,z_2,...,z_m z1,z2,...,zm}. (如果对 z z z存在疑惑,那么就先将其理解为不同模型的概率,其总和为1。后面在第四部分GMM,会有更加容易被理解的说明)
写出其似然函数:
EM算法的公式:
θ ( t + 1 ) = arg ⁡ max ⁡ θ ∫ z log ⁡ P ( X , z ∣ θ ) ⋅ P ( z ∣ X , θ ( t ) ) d z \theta^{(t+1)} = \arg\max_{\theta} \int_z \log P(X, z | \theta) \cdot P(z|X, \theta^{(t)}) dz θ(t+1)=argθmaxzlogP(X,zθ)P(zX,θ(t))dz

  • l o g P ( X , z ∣ θ ) log P(X, z | \theta) logP(X,zθ)是数据X的对数联合概率
  • arg ⁡ max ⁡ θ ∫ z log ⁡ P ( X , z ∣ θ ) ⋅ P ( z ∣ X , θ ( t ) ) d z \arg\max_{\theta} \int_z \log P(X, z | \theta) \cdot P(z|X, \theta^{(t)}) dz argmaxθzlogP(X,zθ)P(zX,θ(t))dz可以表示为 E z ∣ x , θ ( t ) [ log ⁡ P ( x , z ∣ θ ) ] \mathbb{E}_{z|x,\theta^{(t)}}[\log P(x, z|\theta)] Ezx,θ(t)[logP(x,zθ)]

EM算法收敛性的证明

目标:证明下一次迭代的参数 θ \theta θ,要比当前时刻的 θ \theta θ好,即证明其收敛性,公式如下:
θ ( t + 1 ) ← θ ( t ) \theta^{(t+1)} \gets \theta^{(t)} θ(t+1)θ(t) log ⁡ P ( X ∣ θ ( t + 1 ) ) ≥ log ⁡ P ( X ∣ θ ( t ) )  ( 1 ) \log P(X | \theta^{(t+1)})\ge\log P(X | \theta^{(t)})\text{ }(1) logP(Xθ(t+1))logP(Xθ(t)) 1 利用贝叶斯全概率公式可得:
P ( X ∣ θ ) = P ( X , θ ) P ( θ ) = P ( X , θ ) P ( X , Z , θ ) ⋅ P ( X , Z , θ ) P ( θ ) = P ( X ∣ Z , θ ) P ( Z ∣ X , θ ) P(X|θ)=P(X,θ)P(θ)=P(X,θ)P(X,Z,θ)P(X,Z,θ)P(θ)=P(X|Z,θ)P(Z|X,θ)

P(X|θ)=P(X,θ)P(θ)=P(X,θ)P(X,Z,θ)P(X,Z,θ)P(θ)=P(X|Z,θ)P(Z|X,θ)
P(Xθ)=P(θ)P(X,θ)=P(X,Z,θ)P(X,θ)P(θ)P(X,Z,θ)=P(ZX,θ)P(XZ,θ)因此:
log ⁡ P ( X ∣ θ ) = log ⁡ P ( X , z ∣ θ ) P ( z ∣ X , θ ) = log ⁡ P ( X , z ∣ θ ) − P ( z ∣ X , θ )   ( 2 ) \log P(X | \theta)=\log\frac{ P(X,z | \theta)}{P(z | X,\theta)}=\log{ P(X,z | \theta)}-{P(z | X,\theta)} \text{ }\text{ }(2) logP(Xθ)=logP(zX,θ)P(X,zθ)=logP(X,zθ)P(zX,θ)  2 对公式(2)两边同时求期望 E z ∣ x , θ ( t ) [ log ⁡ P ( X ∣ θ ) ] = E z ∣ x , θ ( t ) [ log ⁡ P ( X , z ∣ θ ) − log ⁡ P ( z ∣ X , θ ) ] \mathbb{E}_{z|x,\theta^{(t)}}[\log P(X|\theta)]=\mathbb{E}_{z|x,\theta^{(t)}}[\log P(X, z|\theta)-\log P(z |X,\theta)] Ezx,θ(t)[logP(Xθ)]=Ezx,θ(t)[logP(X,zθ)logP(zX,θ)] 左边 = ∫ z P ( z ∣ X , θ ( t ) ) ⋅ log ⁡ P ( X ∣ θ ) d z = log ⁡ P ( X ∣ θ ) ∫ z P ( z ∣ X , θ ( t ) ) d z = log ⁡ P ( X ∣ θ ) =zP(z|X,θ(t))logP(X|θ)dz=logP(X|θ)zP(z|X,θ(t))dz=logP(X|θ)
=zP(z|X,θ(t))logP(X|θ)dz=logP(X|θ)zP(z|X,θ(t))dz=logP(X|θ)
左边=zP(zX,θ(t))logP(Xθ)dz=logP(Xθ)zP(zX,θ(t))dz=logP(Xθ)
注意: ∫ z P ( z ∣ X , θ ( t ) ) d z = 1 ,可以将其理解为不同模型的占比,总的和为 1. 注意:\int_z P(z|X, \theta^{(t)}) dz=1,可以将其理解为不同模型的占比,总的和为1. 注意:zP(zX,θ(t))dz=1,可以将其理解为不同模型的占比,总的和为1. 右边 = ∫ z P ( z ∣ X , θ ( t ) ) ⋅ log ⁡ P ( X , z ∣ θ ) d z − ∫ z P ( z ∣ X , θ ( t ) ) ⋅ log ⁡ P ( z ∣ X , θ ) d z =zP(z|X,θ(t))logP(X,z|θ)dzzP(z|X,θ(t))logP(z|X,θ)dz
=zP(z|X,θ(t))logP(X,z|θ)dzzP(z|X,θ(t))logP(z|X,θ)dz
右边=zP(zX,θ(t))logP(X,zθ)dzzP(zX,θ(t))logP(zX,θ)dz
Q ( θ , θ ( t ) ) = ∫ z P ( z ∣ X , θ ( t ) ) ⋅ log ⁡ P ( X , z ∣ θ ) d z \text{Q}(\theta, \theta^{(t)})= \int_z P(z|X, \theta^{(t)}) \cdot \log P(X, z|\theta) dz Q(θ,θ(t))=zP(zX,θ(t))logP(X,zθ)dz H ( θ , θ ( t ) ) = ∫ z P ( z ∣ X , θ ( t ) ) ⋅ log ⁡ P ( z ∣ X , θ ) d z \text{H}(\theta, \theta^{(t)})=\int_z P(z|X, \theta^{(t)}) \cdot \log P(z|X, \theta) dz H(θ,θ(t))=zP(zX,θ(t))logP(zX,θ)dz,则:
log ⁡ P ( X ∣ θ ) = Q ( θ , θ ( t ) ) − H ( θ , θ ( t ) )   ( 3 ) \log P(X|\theta)=\text{Q}(\theta, \theta^{(t)})-\text{H}(\theta, \theta^{(t)}) \text{ }(3) logP(Xθ)=Q(θ,θ(t))H(θ,θ(t)) (3)证明公式(3)成立,即证明:
Q ( θ ( t ) , θ ( t ) ) − H ( θ ( t ) , θ ( t ) ) ≤ Q ( θ ( t + 1 ) , θ ( t ) ) − H ( θ ( t + 1 ) , θ ( t ) )   ( 4 ) Q(\theta^{(t)}, \theta^{(t)}) - H(\theta^{(t)}, \theta^{(t)}) \leq Q(\theta^{(t+1)}, \theta^{(t)}) - H(\theta^{(t+1)}, \theta^{(t)})\text{ }(4) Q(θ(t),θ(t))H(θ(t),θ(t))Q(θ(t+1),θ(t))H(θ(t+1),θ(t)) (4)

  • 先证明 Q Q Q: Q ( θ ( t ) , θ ( t ) ) = ∫ z P ( z ∣ X , θ ( t ) ) ⋅ log ⁡ P ( X , z ∣ θ ( t ) ) d z Q ( θ ( t + 1 ) , θ ( t ) ) = ∫ z P ( z ∣ X , θ ( t ) ) ⋅ log ⁡ P ( X , z ∣ θ ( t + 1 ) ) d z Q(\theta^{(t)}, \theta^{(t)}) = \int_z P(z|X, \theta^{(t)}) \cdot \log P(X, z|\theta^{(t)}) dz \\ Q(\theta^{(t+1)}, \theta^{(t)}) = \int_z P(z|X, \theta^{(t)}) \cdot \log P(X, z|\theta^{(t+1)}) dz Q(θ(t),θ(t))=zP(zX,θ(t))logP(X,zθ(t))dzQ(θ(t+1),θ(t))=zP(zX,θ(t))logP(X,zθ(t+1))dz根据定义 θ ( t + 1 ) = arg ⁡ max ⁡ θ ∫ z P ( z ∣ X , θ ( t ) ) ⋅ log ⁡ P ( X , z ∣ θ ) d z \theta^{(t+1)} = \arg\max_{\theta} \int_z P(z|X, \theta^{(t)}) \cdot \log P(X, z|\theta) dz θ(t+1)=argθmaxzP(zX,θ(t))logP(X,zθ)dz 因此 Q ( θ ( t + 1 ) , θ ( t ) ) ≥ Q ( θ ( t ) , θ ( t ) ) Q(\theta^{(t+1)}, \theta^{(t)}) \geq Q(\theta^{(t)}, \theta^{(t)}) Q(θ(t+1),θ(t))Q(θ(t),θ(t))
  • 证明 H H H H ( θ ( t + 1 ) , θ ( t ) ) − H ( θ ( t ) , θ ( t ) ) = ∫ z P ( z ∣ X , θ ( t ) ) ⋅ log ⁡ P ( X , z ∣ θ ( t + 1 ) ) d z − ∫ z P ( z ∣ X , θ ( t ) ) ⋅ log ⁡ P ( X , z ∣ θ ( t ) ) d z = ∫ z P ( z ∣ X , θ ( t ) ) ⋅ ( log ⁡ P ( X , z ∣ θ ( t + 1 ) ) − log ⁡ P ( X , z ∣ θ ( t ) ) ) d z = ∫ z P ( z ∣ X , θ ( t ) ) ⋅ log ⁡ P ( X , z ∣ θ ( t + 1 ) ) P ( X , z ∣ θ ( t ) ) d z H(θ(t+1),θ(t))H(θ(t),θ(t))=zP(z|X,θ(t))logP(X,z|θ(t+1))dzzP(z|X,θ(t))logP(X,z|θ(t))dz=zP(z|X,θ(t))(logP(X,z|θ(t+1))logP(X,z|θ(t)))dz=zP(z|X,θ(t))logP(X,z|θ(t+1))P(X,z|θ(t))dz
    H(θ(t+1),θ(t))H(θ(t),θ(t))=zP(z|X,θ(t))logP(X,z|θ(t+1))dzzP(z|X,θ(t))logP(X,z|θ(t))dz=zP(z|X,θ(t))(logP(X,z|θ(t+1))logP(X,z|θ(t)))dz=zP(z|X,θ(t))logP(X,z|θ(t+1))P(X,z|θ(t))dz
    H(θ(t+1),θ(t))H(θ(t),θ(t))=zP(zX,θ(t))logP(X,zθ(t+1))dzzP(zX,θ(t))logP(X,zθ(t))dz=zP(zX,θ(t))(logP(X,zθ(t+1))logP(X,zθ(t)))dz=zP(zX,θ(t))logP(X,zθ(t))P(X,zθ(t+1))dz

    根据 [ J e n s e n ] ( h t t p s : / / z h u a n l a n . z h i h u . c o m / p / 39315786 ) [Jensen](https://zhuanlan.zhihu.com/p/39315786) [Jensen](https://zhuanlan.zhihu.com/p/39315786)不等式原理: 若 f ( x ) 是 c o n v e x f u n c t i o n (凸函数),则 E [ f ( x ) ] ≥ f ( E [ x ] ) 若f(x) 是convex function(凸函数),则 \mathbb{E}[f(x)] \geq f(\mathbb{E}[x]) f(x)convexfunction(凸函数),则E[f(x)]f(E[x])因此: H ( θ ( t + 1 ) , θ ( t ) ) − H ( θ ( t ) , θ ( t ) ) = ∫ z P ( z ∣ X , θ ( t ) ) ⋅ log ⁡ P ( X , z ∣ θ ( t + 1 ) ) P ( X , z ∣ θ ( t ) ) d z ≤ log ⁡ ∫ z P ( z ∣ X , θ ( t ) ) ⋅ P ( X , z ∣ θ ( t + 1 ) ) P ( X , z ∣ θ ( t ) ) d z = log ⁡ ∫ z P ( z ∣ X , θ ( t + 1 ) ) d z = log ⁡ 1 = 0 H(θ(t+1),θ(t))H(θ(t),θ(t))=zP(z|X,θ(t))logP(X,z|θ(t+1))P(X,z|θ(t))dzlogzP(z|X,θ(t))P(X,z|θ(t+1))P(X,z|θ(t))dz=logzP(z|X,θ(t+1))dz=log1=0
    H(θ(t+1),θ(t))H(θ(t),θ(t))=zP(z|X,θ(t))logP(X,z|θ(t+1))P(X,z|θ(t))dzlogzP(z|X,θ(t))P(X,z|θ(t+1))P(X,z|θ(t))dz=logzP(z|X,θ(t+1))dz=log1=0
    H(θ(t+1),θ(t))H(θ(t),θ(t))=zP(zX,θ(t))logP(X,zθ(t))P(X,zθ(t+1))dzlogzP(zX,θ(t))P(X,zθ(t))P(X,zθ(t+1))dz=logzP(zX,θ(t+1))dz=log1=0
    综上所述,公式(4)得证。EM算法的收敛性得到证明。EM算法的流程为:
  • 设置 θ ( 0 ) \theta^{(0)} θ(0)的初值。不同初值迭代出来的结果可能不同。可以观察下面的示意图,如果 θ ( t ) \theta^{(t)} θ(t)在左边的峰值附近,EM最终就会迭代到左边的局部最优,无法发现右边更大的值,陷入局部最优。(注:该图像来源于:李航老师的《统计学习方法》)
  • 更新 θ ( t ) \theta_{(t)} θ(t)。这一步要进行两种计算求期望E,求极大化M。
  • 比较 θ t 与 θ ( t + 1 ) \theta^t与\theta^{(t+1)} θtθ(t+1)的差异,若变化小于一定阈值则结束迭代;否则,返回第二步

4 高斯混合模型的应用

回到 1 极大似然估计的问题背景中,这时候我们不但想知道身高的分布,还想知道体重的分布情况,因此一个数据 x i x_i xi={ 身高、体重 身高、体重 身高、体重},同时全校的男生、女生混在一起。

4.1 隐变量的引入

我们想一个问题:从全校学生中抽到一个身高为1.7m、体重为60kg的同学的概率是多少?如果明确告诉你这个同学是男生还是女生,那么将其带入高斯模型的中,利用概率密度公式求解,对应的概率就可以直接计算出来。但是,现在你并不知道这个同学的具体性别,这件事情就麻烦了。我们很容易想到用加权的思维去计算这个问题,在这个问题中男生、女生的概率刚好是50%。这里的概率,就是高斯混合模型中的隐变量。隐变量用数学语言做出以下定义: z i j z_{ij} zij表示第 x i x_i xi个数据属于第 j j j个高斯分布的概率 。

4.2 EM-GMM算法推导

  • X : o b s e r v e d   d a t a ⟶ X:observed\text{ }data\longrightarrow Xobserved data x 1 , x 2 , . . , x N x_1,x_2,..,x_N x1,x2,..,xN
  • Z : l a t e n t   d a t a ⟶ Z: latent\text{ }data\longrightarrow Z:latent data z i j z_{ij} zij
  • x : o b s e r v e d   v a r i a b l e x:observed\text{ }variable x:observed variable
  • z : l a t e n t   v a r i a b l e z:latent\text{ }variable z:latent variable
    假设高斯混合模型混了 m m m个高斯分布,参数 θ \theta θ={ α 1 , α 2 , . . . , α m , μ 1 , μ 2 , . . . , μ m , Σ 1 , Σ 2 , . . . , Σ m {\alpha_1,\alpha_2,...,\alpha_m,\mu_1,\mu_2,...,\mu_m,\Sigma _1,\Sigma _2,...,\Sigma _m} α1,α2,...,αm,μ1,μ2,...,μm,Σ1,Σ2,...,Σm},则整个概率密度为 : P ( x ∣ θ ) = ∑ j = 1 m α j ϕ ( x ∣ μ j , Σ k ) , w h e r e ∑ j = 1 m α j = 1 P(x|\theta)=\sum_{j=1}^{m} \alpha_j \phi(x|\mu_j,\Sigma_k),where\sum_{j=1}^{m}\alpha _j=1 P(xθ)=j=1mαjϕ(xμj,Σk)wherej=1mαj=1 对混合分布抽样n次得到 x 1 , . . . , x n {x_1,...,x_n} x1,...,xn,则在第k+1次迭代,待优化式为: max ⁡ θ Q ( θ , θ k ) = max ⁡ θ ∑ x ∈ X ∑ z ∈ Z P ( z ∣ y , θ k ) log ⁡ P ( x , z ∣ θ ) = max ⁡ θ ∑ x ∈ X ∑ z ∈ Z P ( z , y ∣ θ k ) P ( y ∣ θ k ) log ⁡ P ( x , z ∣ θ ) = max ⁡ θ ∑ i = 1 n ∑ j = 1 m α j k ϕ ( x i ∣ θ j k ) ∑ l = 1 m α l k ϕ ( x i ∣ θ l k ) log ⁡ [ α j ϕ ( x i ∣ θ j ) ] = max ⁡ θ ∑ i = 1 n ∑ j = 1 m α j k ϕ ( x i ∣ θ j k ) ∑ l = 1 m α l k ϕ ( x i ∣ θ l k ) log ⁡ [ α j ( 2 π ) D / 2 ∣ Σ j ∣ 1 / 2 exp ⁡ ( − 1 2 ( x i − μ ) T Σ j − 1 ( x i − μ ) ) ] = max ⁡ θ ∑ j = 1 m ∑ i = 1 n α j k ϕ ( x i ∣ θ j k ) ∑ l = 1 m α l k ϕ ( x i ∣ θ l k ) [ log ⁡ α j − 1 2 log ⁡ Σ j − 1 2 ( x i − μ ) T Σ j − 1 ( x i − μ ) ] maxθQ(θ,θk)=maxθxXzZP(zy,θk)logP(x,zθ)=maxθxXzZP(z,yθk)P(yθk)logP(x,zθ)=maxθni=1mj=1αkjϕ(xiθkj)ml=1αklϕ(xiθkl)log[αjϕ(xiθj)]=maxθni=1mj=1αkjϕ(xiθkj)ml=1αklϕ(xiθkl)log[αj(2π)D/2|Σj|1/2exp(12(xiμ)TΣ1j(xiμ))]=maxθmj=1ni=1αkjϕ(xiθkj)ml=1αklϕ(xiθkl)[logαj12logΣj12(xiμ)TΣ1j(xiμ)]
    =====θmaxQ(θ,θk)θmaxxXzZP(zy,θk)logP(x,zθ)θmaxxXzZP(yθk)P(z,yθk)logP(x,zθ)θmaxi=1nj=1ml=1mαlkϕ(xiθlk)αjkϕ(xiθjk)log[αjϕ(xiθj)]θmaxi=1nj=1ml=1mαlkϕ(xiθlk)αjkϕ(xiθjk)log[(2π)D/2Σj1/2αjexp(21(xiμ)TΣj1(xiμ))]θmaxj=1mi=1nl=1mαlkϕ(xiθlk)αjkϕ(xiθjk)[logαj21logΣj21(xiμ)TΣj1(xiμ)]

4.2.1 求解 α \alpha α

p j = α j k ϕ ( x i ∣ θ j k ) ∑ l = 1 m α l k ϕ ( x i ∣ θ l k ) p_j= \frac{\alpha_j^k \phi\left(x_i \mid \theta_j^k\right)}{\sum_{l=1}^m \alpha_l^k \phi\left(x_i \mid \theta_l^k\right)} pj=l=1mαlkϕ(xiθlk)αjkϕ(xiθjk)
构造拉格朗日方程 L ( p , λ ) = ∑ j = 1 m ∑ i = 1 n p j ∗ log ⁡ α j − λ ( ∑ j = 1 m p j − 1 ) L(p,\lambda )= \sum_{j=1}^m \sum_{i=1}^np_j*\log \alpha_j-\lambda(\sum_{j=1}^{m}p_j-1) L(p,λ)=j=1mi=1npjlogαjλ(j=1mpj1)
p j p_j pj求导: ∂ L ∂ p j = ∑ i = 1 n 1 α j ∗ p j − λ = 0 \frac{\partial L}{\partial p_j}= \sum_{i=1}^n\frac{1}{\alpha_j}*p_j-\lambda=0 pjL=i=1nαj1pjλ=0 ∂ L ∂ p j = ∑ i = 1 n p j − α j ∗ λ = 0 \frac{\partial L}{\partial p_j}= \sum_{i=1}^np_j-\alpha_j*\lambda=0 pjL=i=1npjαjλ=0对于所有的 j j j,即 j j j 1 1 1 m m m,对上式加和:
∑ j = 1 m ∑ i = 1 n p j − ∑ i = j m α j ∗ λ = 0  ** \sum_{j=1}^m\sum_{i=1}^np_j-\sum_{i=j}^m\alpha_j*\lambda=0\text{ **} j=1mi=1npji=jmαjλ=0 **
因为 ∑ j = 1 m p j = 1 , ∑ j = 1 m α j = 1 \sum_{j=1}^mp_j=1,\sum_{j=1}^m\alpha_j=1 j=1mpj=1,j=1mαj=1
所以推出 λ = N \lambda=N λ=N,代入(**)式子,得 α k = 1 n ∑ i = 1 n α j k ϕ ( x i ∣ θ j k ) ∑ l = 1 m α l k ϕ ( x i ∣ θ l k ) \alpha_k=\frac{1}{n}\sum_{i=1}^{n}\frac{\alpha_j^k \phi\left(x_i \mid \theta_j^k\right)}{\sum_{l=1}^m \alpha_l^k \phi\left(x_i \mid \theta_l^k\right)} αk=n1i=1nl=1mαlkϕ(xiθlk)αjkϕ(xiθjk)

4.2.2 求解 μ 、 Σ \mu、\Sigma μΣ

对这两项的求导不进行展开,较为简单。只展示最终结果:

μ j ← ∑ i = 1 N p j x ( i ) ∑ i = 1 N p j Σ j ← ∑ i = 1 N p j ⋅ { ( x ( i ) − μ j ) ( x ( i ) − μ j ) T } ∑ i = 1 N p j μjNi=1pjx(i)Ni=1pjΣjNi=1pj{(x(i)μj)(x(i)μj)T}Ni=1pj

μji=1Npji=1Npjx(i)Σji=1Npji=1Npj{(x(i)μj)(x(i)μj)T} p j p_j pj在4.2.1第一个公式进行说明

python实现代码

import numpy as np
import matplotlib.pyplot as plt
from sklearn.mixture import GaussianMixture

# 初始化分布参数
MU1 = np.array([1, 2])
SIGMA1 = np.array([[1, 0], [0, 0.5]])
MU2 = np.array([-1, -1])
SIGMA2 = np.array([[1, 0], [0, 1]])

# 生成数据点
data1 = np.random.multivariate_normal(MU1, SIGMA1, 1000)
data2 = np.random.multivariate_normal(MU2, SIGMA2, 1000)

X = np.concatenate([data1, data2])

#对X进行随机打乱,此步复现时不可忽略
np.random.shuffle(X)

# Step 2:请在这里绘制二维散点图。
plt.scatter(data1[:, 0], data1[:, 1], label='Class 1')
plt.scatter(data2[:, 0], data2[:, 1], label='Class 2')
plt.xlabel('X')
plt.ylabel('Y')
plt.title('Scatter Plot of Data Points')
plt.legend()
plt.show()

# Step 3:GMMs的代码实现。
def my_fit_GMM(X, K, Max_iters):
    N, D = X.shape  # 获取数据X的维度
    alpha = np.ones(K) / K  # 初始化混合系数
    mu = X[np.random.choice(N, K, False), :]
    # 初始化COV
    cov = [np.cov(X.T) for _ in range(K)]
    E = np.zeros((N, K))  # 初始化后验概率矩阵

    while Max_iters>0:
        Max_iters-=1
        oldmu = mu.copy()    # E-Step
        for i in range(N):
            for j in range(K):
                E[i, j] = alpha[j] * multivariate_gaussian_pdf(X[i], mu[j], cov[j])
        E /= E.sum(axis=1, keepdims=True)

        # M-Step
        sum_E = E.sum(axis=0)
        alpha = sum_E / N

        for j in range(K):
            mu[j] = E[:,j]@X / sum_E[j]
            x_mu = X - mu[j]
            cov[j] = (E[:, j, np.newaxis] * x_mu).T @ x_mu / sum_E[j]
        if abs(np.linalg.det(mu-oldmu))<2.2204e-16:
            break
    return mu, cov,alpha

# 混合高斯的pdf
def multivariate_gaussian_pdf(x, mu, cov):
    k = len(mu)
    cov_det = np.linalg.det(cov)
    cov_inv = np.linalg.inv(cov)
    pdf = (1.0 / np.sqrt((2 * np.pi) ** k * cov_det))*np.exp(-0.5 * (x - mu) @ cov_inv @ (x - mu).T)  # 高斯的公式
    return pdf

# Step 4:请用GMMs拟合散点分布。
means, cov, weights = my_fit_GMM(X,2,100)

# Step 5:绘制GMMs所拟合分布的概率密度函数。画图函数
from scipy.stats import multivariate_normal

def draw_results(m,s,w):
    # 定义两个二维高斯分布的参数
    m1 = m[0]
    s1 = s[0]

    m2 = m[1]
    s2 = s[1]

    # 生成网格点
    x, y = np.mgrid[-5:5:.01, -5:5:.01]
    pos = np.dstack((x, y))

    # 计算每个点的概率密度值
    rv1 = multivariate_normal(m1, s1)
    rv2 = multivariate_normal(m2, s2)
    z1 = rv1.pdf(pos)
    z2 = rv2.pdf(pos)

    # 混合两个高斯分布的概率密度函数
    z = w[0] * z1 + w[1] * z2  # 设置混合比例

    # 绘制3D图
    fig = plt.figure(figsize=(5, 10))
    ax = fig.add_subplot(111, projection='3d')
    ax.plot_surface(x, y, z, cmap='viridis')

    # 设置坐标轴标签和标题
    ax.set_xlabel('X')
    ax.set_ylabel('Y')
    ax.set_zlabel('Probability Density')
    ax.set_title('3D Plot of Mixture Gaussian Probability Density')
    plt.show()

# Step 6:输出估计的均值和方差。 可以与Step 1的数据进行对比
print("Data1.Means:")
print(means[0])
print("Data2.Means:")
print(means[1])

print("Data1.Covariances:")
print(cov[0])
print("Data2.Covariances:")
print(cov[1])

print("Weights:")
print(weights)

draw_results(means, cov, weights)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120

在这里插入图片描述

参考链接

https://blog.csdn.net/zouxy09/article/details/8537620
https://www.cnblogs.com/qizhou/p/13100817.html
https://www.bilibili.com/video/BV13b411w7Xj/?p=4&vd_source=395b52d7c4e90a9c96a83181871f36bb

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/594637
推荐阅读
相关标签
  

闽ICP备14008679号