高斯混合模型GMM及EM迭代求解算法(含代码实现)

高斯混合模型GMM及EM迭代求解算法(含代码实现)

高斯分布与高斯混合模型

高斯分布

高斯分布大家都很熟悉了,下面是一元高斯分布的概率密度函数(Probability Density Function,PDF):
P(x)=N(μ,σ2)=12πσexp⁡(−(x−μ)22σ2)P(x)=N(\mu,\sigma^2)=\frac{1}{\sqrt{2\pi}\sigma}\exp(-\frac{(x-\mu)^2}{2\sigma^2}) P(x)=N(μ,σ2)=2πσ1exp(2σ2(xμ)2)
其中 μ\muμσ2\sigma^2σ2 分别是该高斯分布的均值和方差,而如果是多元高斯分布,则为:
P(x)=1(2π)D2∣Σ∣12exp⁡(−(x−μ)TΣ−1(x−μ)2)P(x)=\frac{1}{(2\pi)^{\frac{D}{2}}|\Sigma|^{\frac{1}{2}}}\exp(-\frac{(x-\mu)^T\Sigma^{-1}(x-\mu)}{2}) P(x)=(2π)2D∣Σ211exp(2(xμ)TΣ1(xμ))
其中 μ\muμΣ\SigmaΣDDD 分别是均值、协方差矩阵和数据维度。

高斯混合模型

高斯混合模型,顾名思义,就是由多个单高斯模型组合而成的模型。具体来说,它是具有如下形式的概率分布模型:
P(x∣θ)=∑k=1Kαkϕ(x∣θk)P(x|\theta)=\sum_{k=1}^K\alpha_k\phi(x|\theta_k) P(xθ)=k=1Kαkϕ(xθk)
其中:

  • KKK 是该混合模型中单高斯模型的个数
  • αk\alpha_kαk 是各个单高斯模型的权重系数,它满足:αk≥0\alpha_k\ge0αk0∑k=1Kαk=1\sum_{k=1}^K\alpha_k=1k=1Kαk=1
  • ϕ(x∣θk)\phi(x|\theta_k)ϕ(xθk) 是第 kkk 个单高斯模型的概率密度,也称为 kkk 个分模型
  • θk\theta_kθk 表示第 kkk 个单高斯模型的参数(均值和方差),即 θk=(μk,σk2)\theta_k=(\mu_k,\sigma_k^2)θk=(μk,σk2)

为什么是高斯?

对于一般地混合模型,我们可以选用任何自己认为合适的单概率分布模型。这

里使用高斯混合模型是因为由中心极限定理可以得知,将现实世界中的数据分布假设为高斯分布是比较合理的,并且高斯分布具备很好的数学性质以及良好的计算性能。

为什么要混合?

现实世界中,我们的样本通常都是会有多个特征来描述,此时如果使用单个高斯模型来对问题进行建模,显然表达能力是不足的。而如果我们使用多个高斯模型,按照一定的权重参数将它们组合,将大大提高整个模型的表达能力。

具体来说,我们知道单个高斯模型是单峰的(如图所示),即只有某一个区间的概率特别高,两端都是逐渐降低的。而如果我们使用两个高斯模型混合,得到的模型表达能力更强,可以处理现实世界中的复杂分布。

理论上,混合高斯模型的概率密度函数曲线可以是任意形状的非线性函数。

在这里插入图片描述

图1:单高斯模型与混合高斯模型的概率密度函数

高斯混合模型的三种理解角度

几何角度

从几何的角度来看高斯混合模型,在图像上(如图1所示),它由多个高斯分布叠加而成,是多个高斯分布的加权平均值。
P(x∣θ)=∑k=1Kαkϕ(x∣θk)P(x|\theta)=\sum_{k=1}^K\alpha_k\phi(x|\theta_k) P(xθ)=k=1Kαkϕ(xθk)
在这个角度下,这里的 αk\alpha_kαk 就是每个单高斯模型的权重。

混合模型的角度

高斯混合模型中有两个变量:

  • X=(x1,x2,…,xN)X=(x_1,x_2,\dots,x_N)X=(x1,x2,,xN):观测数据
  • Z=(z1,z2,…,zN)Z=(z_1,z_2,\dots,z_N)Z=(z1,z2,,zN):隐变量

这两个变量合称为完全数据。

关于什么是隐变量,这是笔者从网络上找到的一个例子,感觉这个例子和 GMM 中的引入的隐变量意思非常接近(可结合下面样本生成的角度来理解),并且比较直观:

举个例子吧

一个人拿着n个袋子,里面有m种颜色不同的球。现在这个人随机地抓球,规则如下:

  1. 先随机挑一个袋子

  2. 从这个袋子中随机挑一个球

如果你站在这个人旁边,你目睹了整个过程:这个人选了哪个袋子、抓出来的球是什么颜色的。然后你把每次选择的袋子和抓出来的球的颜色都记录下来(样本观察值),那个人不停地抓,你不停地记。最终你就可以通过你的记录,推测出每个袋子里每种球颜色的大致比例。并且你记录的越多,推测的就越准(中心极限定理)。

然而,抓球的人觉得这样很不爽,于是决定不告诉你他从哪个袋子里抓的球,只告诉你抓出来的球的颜色是什么。这时候,“选袋子”的过程由于你看不见,其实就相当于是一个隐变量。

隐变量在很多地方都是能够出现的。现在我们经常说的隐变量主要强调它的“latent”。所以广义上的隐变量主要就是指“不能被直接观察到,但是对系统的状态和能观察到的输出存在影响的一种东西”。

在 GMM 中, ZZZ 就是我们引入一个隐变量: zi,i=[1,2,…,N]z_i,i=[1,2,\dots,N]zi,i=[1,2,,N] ,用它来表示对应的观测样本 xix_ixi 是属于哪一个高斯分布,具体来说,是样本 xix_ixi 属于每一个高斯分布的概率(类似软分类的思想)。

这样,很自然地,ZZZ 应当是一个离散随机变量,并服从多项分布。其分布律为:

ZZZC1C_1C1C2C_2C2…\dotsCKC_KCK
P(z)P(z)P(z)p1p_1p1p2p_2p2…\dotspKp_KpK

其中 CkC_kCk 表示第 kkk 个单高斯模型, ∑k=1Kpk=1\sum_{k=1}^Kp_k=1k=1Kpk=1

现在我们推导在混合模型的角度下,高斯混合模型的概率分布:
P(X)=∫zP(X,Z)dz=∑ZP(X,Z=Ck)=∑k=1KP(Z=Ck)P(X∣Z=Ck)=∑k=1KpkN(X∣μk,σk2)=∑k=1Kpkϕ(x∣θk)\begin{align} P(X)&=\int_zP(X,Z)dz\\ &=\sum_ZP(X,Z=C_k)\\ &=\sum_{k=1}^KP(Z=C_k)P(X|Z=C_k)\\ &=\sum_{k=1}^Kp_kN(X|\mu_k,\sigma_k^2)\\ &=\sum_{k=1}^Kp_k\phi(x|\theta_k) \end{align} P(X)=zP(X,Z)dz=ZP(X,Z=Ck)=k=1KP(Z=Ck)P(XZ=Ck)=k=1KpkN(Xμk,σk2)=k=1Kpkϕ(xθk)

推导过程解释:由联合概率密度函数 P(X,Z)P(X,Z)P(X,Z) 求边缘概率密度函数 P(X)P(X)P(X),最直接的想法就是将另一个随机变量 ZZZ 直接积掉,又由于这里的 ZZZ 是一个离散的随机变量,因此应该是积分应该写为求和,然后由公式 P(X,Y)=P(Y)P(X∣Y)P(X,Y)=P(Y)P(X|Y)P(X,Y)=P(Y)P(XY) 进行分解,此时前一项 P(Z=Ck)P(Z=C_k)P(Z=Ck) 由分布律知就是 pkp_kpk ,而后一项条件概率 P(X∣Z=Ck)P(X|Z=C_k)P(XZ=Ck) 表示的是在选定第 kkk 个高斯分布之后的概率密度函数,那自然就是其本身的概率密度函数 N(X∣μk,σk2)N(X|\mu_k,\sigma_k^2)N(Xμk,σk2)

这里的 pkp_kpk 表示的是多项分布 ZZZ 的概率取值,这里的 pkp_kpk 其实对应的就是上一种角度中的权重系数 αk\alpha_kαk ,但是在两种不同的理解角度中有不同的物理含义。

从混合模型的角度来看,GMM是由离散的多项分布+连续的高斯分布组成。

样本生成的角度

GMM 是一个生成模型,从样本生成的角度来说:

对于每一个样本点 xix_ixi ,我们可以认为它是通过这样的过程得到的 :先通过一个多项(KKK 项)分布选择一个单高斯模型(相当于掷一个有 KKK 个面的骰子),然后从对应的高斯分布中进行采样得到 xix_ixi

为什么MLE无法求出高斯混合模型的解析解

高斯混合模型的参数

高斯混合模型中的参数,就是我们公式中的 θ\thetaθ ,是哪些呢?很明显的,参数包括每个单高斯模型对应的权重系数 αk\alpha_kαk 和每个单高斯模型自身的均值方差 θk=(μk,σk2)\theta_k=(\mu_k,\sigma_k^2)θk=(μk,σk2)

即混合高斯模型中的参数:
θ=(α1,α2,…,αK;θ1,θ2,…,θK)=(α1,α2,…,αK;μ1,μ2,…,μK;σ1,σ2,…,σK)\theta=(\alpha_1,\alpha_2,\dots,\alpha_K;\theta_1,\theta_2,\dots,\theta_K)=(\alpha_1,\alpha_2,\dots,\alpha_K;\mu_1,\mu_2,\dots,\mu_K;\sigma_1,\sigma_2,\dots,\sigma_K) θ=(α1,α2,,αK;θ1,θ2,,θK)=(α1,α2,,αK;μ1,μ2,,μK;σ1,σ2,,σK)
观测数据 x1,x2,…,xnx_1,x_2,\dots,x_nx1,x2,,xn 由参数为 θ\thetaθ 的高斯混合模型生成,

高斯混合模型的MLE尝试

对于单高斯模型,我们可以直接用极大似然估计 MLE 来求解。下面我们对混合高斯模型也进行类似的尝试,看能不能行得通:
θ^MLE=arg⁡max⁡θP(X)=arg⁡max⁡θlog⁡P(X)=arg⁡max⁡θlog⁡P(x1)P(x2)…P(XN)=arg⁡max⁡θlog⁡∏i=1NP(xi)=arg⁡max⁡θ∑i=1Nlog⁡P(xi)=arg⁡max⁡θ∑i=1Nlog⁡∑k=1Kpkϕ(x∣θk)\begin{align} \hat{\theta}_{MLE}&=\arg\max_\theta P(X)\\ &=\arg\max_\theta \log P(X)\\ &=\arg\max_\theta\log P(x_1)P(x_2)\dots P(X_N)=\arg\max_\theta\log \prod_{i=1}^NP(x_i)\\ &=\arg\max_\theta\sum_{i=1}^N\log P(x_i)\\ &=\arg\max_\theta\sum_{i=1}^N\log \sum_{k=1}^Kp_k\phi(x|\theta_k) \end{align} θ^MLE=argθmaxP(X)=argθmaxlogP(X)=argθmaxlogP(x1)P(x2)P(XN)=argθmaxlogi=1NP(xi)=argθmaxi=1NlogP(xi)=argθmaxi=1Nlogk=1Kpkϕ(xθk)
至此,下一步应该是对 θk\theta_kθk 各个值进行求偏导,然后令导数为 0。

但是我们发现,在对数 log⁡\loglog 里面还有一个连加符号。对于对数里的连乘,我们可以利用对数的性质,直接拿出来,变为连加,但是对于对数里本身的连加符号,是非常难处理的。因此,到这一步之后,无法直接求出混合高斯模型的解析解。

接下来,我们将介绍如何利用 EM 算法来迭代求解高斯混合模型的参数 θ\thetaθ

EM算法迭代求解高斯混合模型

EM算法的一般步骤

EM 算法是一种非监督期望最大化算法。其结合了极大似然和迭代求解的方法去预估数据的分布。EM 算法主要用来解决含有隐变量的混合模型的参数估计,非常适合求解高斯混合模型。

这里直接给出一般的算法步骤,详情见:[TODO]

EM 算法通过迭代求 L(θ)=log⁡P(X∣θ)L(\theta)=\log P(X|\theta)L(θ)=logP(Xθ) 的极大似然估计,每次迭代包含两部:E步,求期望;M步,求极大化。

算法流程:

  • 输入:观测变量数据 XXX,隐变量数据 ZZZ,联合分布 P(X,Z∣θ)P(X,Z|\theta)P(X,Zθ) ,条件分布:P(Z∣X,θ)P(Z|X,\theta)P(ZX,θ)

  • 输出:模型参数 θ\thetaθ

  • 步骤

    1. 选择参数的初值 θ0\theta^{0}θ0 ,开始迭代;

    2. E 步:记 θt\theta^{t}θt 为第 ttt 次迭代参数 θ\thetaθ 的估计值,在第 i+1i+1i+1 次迭代的 E 步,计算:
      Q(θ,θt)=EZ[log⁡P(X,Z∣θ)∣X,θ(t)]=∑Zlog⁡P(X,Z∣θ)P(Z∣X,θ(t))\begin{align} Q(\theta,\theta^{t})&=\mathbb{E}_Z[\log P(X,Z|\theta)|X,\theta^{(t)}]\\ &=\sum_{Z}\log P(X,Z|\theta)P(Z|X,\theta^{(t)}) \end{align} Q(θ,θt)=EZ[logP(X,Zθ)X,θ(t)]=ZlogP(X,Zθ)P(ZX,θ(t))
      这里 P(Z∣X,θ(t))P(Z|X,\theta^{(t)})P(ZX,θ(t)) 为给定观测数据 XXX 和当前参数估计 θ(t)\theta^{(t)}θ(t) 下隐变量数据 ZZZ 的条件概率分布;

    3. M 步:求使 Q(θ,θ(t))Q(\theta,\theta^{(t)})Q(θ,θ(t)) 极大化的 θ\thetaθ ,确定第 t+1t+1t+1 次迭代的参数估计值 θt+1\theta^{t+1}θt+1 :
      θ(t+1)=arg⁡max⁡θQ(θ,θt)\theta^{(t+1)}=\arg\max_{\theta}Q(\theta,\theta^{t}) θ(t+1)=argθmaxQ(θ,θt)

    4. 重复 2、3 两步,直到收敛。

函数 Q(θ,θ(t))Q(\theta,\theta^{(t)})Q(θ,θ(t)) 是 EM 算法的核心,称为 QQQ 函数。

使用EM算法求解GMM推导

1 写出完全数据的对数似然函数

这里隐变量的定义与之前不同,是因为

回忆我们之前介绍的生成模型的角度,观测数据 xi,i=1,2,…,Nx_i,i=1,2,\dots,Nxi,i=1,2,,N 是这样产生的:首先根据概率 αk\alpha_kαk 选择第 kkk 个单高斯分布模型 ϕ(x∣θk)\phi(x|\theta_k)ϕ(xθk) ,然后根据 ϕ(x∣θk)\phi(x|\theta_k)ϕ(xθk) 生成观测数据 xix_ixi 。注意,观测数据 xix_ixi 是已知的;反映观测数据 xix_ixi 来自第 kkk 个单高斯模型的的数据是未知的,用隐变量 zikz_{ik}zik 表示,其定义如下:
zik={1,第i个观测来自第k个分模型0,否则i=1,2,…,N;k=1,2,…,Kz_{ik}=\begin{cases}1,\ \ \ 第i个观测来自第k个分模型 \\ 0,\ \ \ 否则\end{cases}\\ i=1,2,\dots,N;\ \ \ k=1,2,\dots,K zik={1,   i个观测来自第k个分模型0,   否则i=1,2,,N;   k=1,2,,K
隐变量 zikz_{ik}zik 与观测数据 XXX 共同组成了完全数据,记为 (xi,zi1,zi2,…,ziK),i=1,2,…,N(x_i,z_{i1},z_{i2},\dots,z_{iK}),\ \ \ i=1,2,\dots,N(xi,zi1,zi2,,ziK),   i=1,2,,N

记 GMM 模型:
P(x∣θ)=∑k=1Kαkϕ(x∣θk)P(x|\theta)=\sum_{k=1}^K\alpha_k\phi(x|\theta_k) P(xθ)=k=1Kαkϕ(xθk)

则有完全数据的似然函数:
P(x,z∣θ)=∏i=1NP(xi,zi1,zi2,…,ziK∣θ)=∏k=1K∏i=1N[αkϕ(xi∣θk)]zik=∏k=1Kαknk∏i=1N[ϕ(xi∣θk)]zik=∏k=1Kαknk∏i=1N[12πσkexp⁡(−(xi−μk)22σk2)]zik\begin{align} P(x,z|\theta)&=\prod_{i=1}^NP(x_i,z_{i1},z_{i2},\dots,z_{iK}|\theta)\\ &=\prod_{k=1}^K\prod_{i=1}^N[\alpha_k\phi(x_i|\theta_k)]^{z_{ik}}\\ &=\prod_{k=1}^K\alpha_k^{n_k}\prod_{i=1}^N[\phi(x_i|\theta_k)]^{z_{ik}}\\ &=\prod_{k=1}^K\alpha_k^{n_k}\prod_{i=1}^N[\frac{1}{\sqrt{2\pi}\sigma_k}\exp(-\frac{(x_i-\mu_k)^2}{2\sigma_k^2})]^{z_{ik}} \end{align} P(x,zθ)=i=1NP(xi,zi1,zi2,,ziKθ)=k=1Ki=1N[αkϕ(xiθk)]zik=k=1Kαknki=1N[ϕ(xiθk)]zik=k=1Kαknki=1N[2πσk1exp(2σk2(xiμk)2)]zik
其中,nl=∑i=1Nzikn_l=\sum_{i=1}^Nz_{ik}nl=i=1Nzik∑k=1Knk=N\sum_{k=1}^Kn_k=Nk=1Knk=N

那么,完全数据的对输入似然函数为:
log⁡P(x,z∣θ)=∑k=1K{(nklog⁡αk+∑j=1Nzik[log⁡(12π)−log⁡σk−12σl2(xi−μk)2]}\log P(x,z|\theta)=\sum_{k=1}^K\{(n_k\log\alpha_k+\sum_{j=1}^Nz_{ik}[\log(\frac{1}{\sqrt{2\pi}})-\log \sigma_k-\frac{1}{2\sigma_l^2}(x_i-\mu_k)^2]\} logP(x,zθ)=k=1K{(nklogαk+j=1Nzik[log(2π1)logσk2σl21(xiμk)2]}

2 E步,求期望,写出 QQQ 函数

Q(θ,θ(t)=E(log⁡P(x,z∣θ)∣x,θ(t))=E{∑k=1K{(nklog⁡αk+∑j=1Nzik[log⁡(12π)−log⁡σk−12σl2(xi−μk)2]}}=∑k=1K{∑i=1N(Ezik)log⁡αk+∑i=1N(Ezik[log⁡12π−log⁡σk−12σk2)(xi−μk)2]}\begin{align} Q(\theta,\theta^{(t)}&=\mathbb{E}(\log P(x,z|\theta)|x,\theta^{(t)})\\ &=\mathbb{E}\{\sum_{k=1}^K\{(n_k\log\alpha_k+\sum_{j=1}^Nz_{ik}[\log(\frac{1}{\sqrt{2\pi}})-\log \sigma_k-\frac{1}{2\sigma_l^2}(x_i-\mu_k)^2]\}\}\\ &=\sum_{k=1}^K\{\sum_{i=1}^N(\mathbb{E}z_{ik})\log \alpha_k+\sum_{i=1}^N(\mathbb{E}z_{ik}[\log \frac{1}{\sqrt{2\pi}}-\log\sigma_k-\frac{1}{2\sigma_k^2})(x_i-\mu_k)^2]\} \end{align} Q(θ,θ(t)=E(logP(x,zθ)x,θ(t))=E{k=1K{(nklogαk+j=1Nzik[log(2π1)logσk2σl21(xiμk)2]}}=k=1K{i=1N(Ezik)logαk+i=1N(Ezik[log2π1logσk2σk21)(xiμk)2]}

这里需要计算 E(zik∣x,θ)\mathbb{E}(z_{ik}|x,\theta)E(zikx,θ),记为 z^ik\hat{z}_{ik}z^ik
z^ik=E(zik∣x,θ)=P(zik=1∣x,θ)=P(zik=1,xi∣θ)∑k=1KP(zik=1,xi∣θ)=P(xi∣zik=1,θ)P(zik=1∣θ)∑k=1KP(xi∣zik=1,θ)P(zik=1,θ)=αkϕ(xi∣θk)∑k=1Kαkϕ(xi∣θk),i=1,2,…,N;k=1,2,…,K\begin{align} \hat{z}_{ik}&=\mathbb{E}(z_{ik}|x,\theta)=P(z_{ik}=1|x,\theta)\\ &=\frac{P(z_{ik}=1,x_i|\theta)}{\sum_{k=1}^KP(z_{ik}=1,x_i|\theta)}\\ &=\frac{P(x_i|z_{ik}=1,\theta)P(z_{ik}=1|\theta)}{\sum_{k=1}^KP(x_i|z_{ik}=1,\theta)P(z_{ik}=1,\theta)}\\ &=\frac{\alpha_k\phi(x_i|\theta_k)}{\sum_{k=1}^K\alpha_k\phi(x_i|\theta_k)},\ \ i=1,2,\dots,N;\ k=1,2,\dots,K \end{align} z^ik=E(zikx,θ)=P(zik=1∣x,θ)=k=1KP(zik=1,xiθ)P(zik=1,xiθ)=k=1KP(xizik=1,θ)P(zik=1,θ)P(xizik=1,θ)P(zik=1∣θ)=k=1Kαkϕ(xiθk)αkϕ(xiθk),  i=1,2,,N; k=1,2,,K
z^ik\hat{z}_{ik}z^ik 是当前模型参数下第 iii 个观测数据来自第 kkk 个模型的概率,称为分模型 kkk 对观测数据 xix_ixi 的响应程度。

z^ik=Ezik\hat{z}_{ik}=\mathbb{E}z_{ik}z^ik=Eziknk=∑i=1NEzikn_k=\sum_{i=1}^N\mathbb{E}z_{ik}nk=i=1NEzik 代入得:
Q(θ,θ(t))=∑k=1K{∑i=1N(nklog⁡αk+∑i=1N(z^ik[log⁡12π−log⁡σk−12σk2)(xi−μk)2]}Q(\theta,\theta^{(t)})=\sum_{k=1}^K\{\sum_{i=1}^N(n_k\log \alpha_k+\sum_{i=1}^N(\hat{z}_{ik}[\log \frac{1}{\sqrt{2\pi}}-\log\sigma_k-\frac{1}{2\sigma_k^2})(x_i-\mu_k)^2]\} Q(θ,θ(t))=k=1K{i=1N(nklogαk+i=1N(z^ik[log2π1logσk2σk21)(xiμk)2]}

3 M步,求极大

M 步是求函数 Q(θ,θ(t))Q(\theta,\theta^{(t)})Q(θ,θ(t)) 取得极大值时的 θ\thetaθ ,作为 θ(t+1)\theta^{(t+1)}θ(t+1)
θ(t+1)=arg⁡max⁡θQ(θ,θ(t))\theta^{(t+1)}=\arg\max_{\theta}Q(\theta,\theta^{(t)}) θ(t+1)=argθmaxQ(θ,θ(t))
我们之前介绍过,GMM 模型要估计的参数为:
θ=(α1,α2,…,αK;θ1,θ2,…,θK)=(α1,α2,…,αK;μ1,μ2,…,μK;σ1,σ2,…,σK)\theta=(\alpha_1,\alpha_2,\dots,\alpha_K;\theta_1,\theta_2,\dots,\theta_K)=(\alpha_1,\alpha_2,\dots,\alpha_K;\mu_1,\mu_2,\dots,\mu_K;\sigma_1,\sigma_2,\dots,\sigma_K) θ=(α1,α2,,αK;θ1,θ2,,θK)=(α1,α2,,αK;μ1,μ2,,μK;σ1,σ2,,σK)
对于 μk\mu_kμkσk2\sigma_k^2σk2 ,我们只需根据上式分别对他们求偏导并令其为 0 即可;

而对于 α^k\hat{\alpha}_kα^k ,还需要注意约束条件 ∑k=1Kαk=1\sum_{k=1}^K\alpha_k=1k=1Kαk=1

结果如下:
μ^k=∑i=1Nz^ikxi∑i=1Nz^ikσ^k2=∑i=1Nz^ik(xi−μk)2∑i=1Nz^ikα^k=nkN=∑i=1Nz^ikN\hat{\mu}_k=\frac{\sum_{i=1}^N\hat{z}_{ik}x_i}{\sum_{i=1}^N\hat{z}_{ik}}\\ \hat{\sigma}_{k}^2=\frac{\sum_{i=1}^N\hat{z}_{ik}(x_i-\mu_k)^2}{\sum_{i=1}^N\hat{z}_{ik}}\\ \hat{\alpha}_k=\frac{n_k}{N}=\frac{\sum_{i=1}^N\hat{z}_{ik}}{N} μ^k=i=1Nz^iki=1Nz^ikxiσ^k2=i=1Nz^iki=1Nz^ik(xiμk)2α^k=Nnk=Ni=1Nz^ik
重复上述 2、3 步,直到收敛。

GMM模型的EM算法步骤

至此,可以给出GMM模型的EM算法步骤:

  1. 选择参数的初值 θ0\theta^{0}θ0 ,开始迭代;

  2. E 步:记 θt\theta^{t}θt 为第 ttt 次迭代参数 θ\thetaθ 的估计值,在第 i+1i+1i+1 次迭代的 E 步,计算:
    Q(θ,θ(t))=∑k=1K{∑i=1N(nklog⁡αk+∑i=1N(z^ik[log⁡12π−log⁡σk−12σk2)(xi−μk)2]}Q(\theta,\theta^{(t)})=\sum_{k=1}^K\{\sum_{i=1}^N(n_k\log \alpha_k+\sum_{i=1}^N(\hat{z}_{ik}[\log \frac{1}{\sqrt{2\pi}}-\log\sigma_k-\frac{1}{2\sigma_k^2})(x_i-\mu_k)^2]\} Q(θ,θ(t))=k=1K{i=1N(nklogαk+i=1N(z^ik[log2π1logσk2σk21)(xiμk)2]}
    这里 P(Z∣X,θ(t))P(Z|X,\theta^{(t)})P(ZX,θ(t)) 为给定观测数据 XXX 和当前参数估计 θ(t)\theta^{(t)}θ(t) 下隐变量数据 ZZZ 的条件概率分布;

  3. M 步:求使 Q(θ,θ(t))Q(\theta,\theta^{(t)})Q(θ,θ(t)) 极大化的 θ\thetaθ ,确定第 t+1t+1t+1 次迭代的参数估计值 θt+1\theta^{t+1}θt+1 :
    μ^k=∑i=1Nz^ikxi∑i=1Nz^ikσ^k2=∑i=1Nz^ik(xi−μk)2∑i=1Nz^ikα^k=nkN=∑i=1Nz^ikN\hat{\mu}_k=\frac{\sum_{i=1}^N\hat{z}_{ik}x_i}{\sum_{i=1}^N\hat{z}_{ik}}\\ \hat{\sigma}_{k}^2=\frac{\sum_{i=1}^N\hat{z}_{ik}(x_i-\mu_k)^2}{\sum_{i=1}^N\hat{z}_{ik}}\\ \hat{\alpha}_k=\frac{n_k}{N}=\frac{\sum_{i=1}^N\hat{z}_{ik}}{N} μ^k=i=1Nz^iki=1Nz^ikxiσ^k2=i=1Nz^iki=1Nz^ik(xiμk)2α^k=Nnk=Ni=1Nz^ik

  4. 重复 2、3 两步,直到收敛。

代码

给出参考实现[代码][[https://github.com/wl-lei/upload/blob/master/homework/GMM.py]

import numpy as np
import randomdef calc_prob(X, K, pMu, pSigma):N = X.shape[0]D = X.shape[1]Px = np.zeros((N, K))for i in range(K):Xshift = X-np.tile(pMu[i], (N, 1))lambda_flag = np.e**(-5)conv = pSigma[i]+lambda_flag*np.eye(D)inv_pSigma = np.linalg.inv(conv)tmp = np.sum(np.dot(Xshift, inv_pSigma)*Xshift, axis=1)coef = (2*np.pi)**(-D/2)*np.sqrt(np.linalg.det(inv_pSigma))Px[:, i] = coef*np.e**(-1/2*tmp)return Pxdef gmm(X, K):       #用array来处理threshold = np.e**(-15)N = X.shape[0]D = X.shape[1]rndp = random.sample(np.arange(N).tolist(),K)centroids = X[rndp,:]pMu = centroidspPi = np.zeros((1, K))pSigma = np.zeros((K, D, D))dist = np.tile(np.sum(X*X, axis=1).reshape(N,1), (1, K))+np.tile(np.sum(pMu*pMu, axis=1), (N, 1))-2*np.dot(X, pMu.T)labels = np.argmin(dist,axis=1)for i in range(K):index = labels == iXk = X[index,:]pPi[:,i] = (Xk.shape[0])/NpSigma[i] = np.cov(Xk.T)Loss = -float("inf")while True:Px = calc_prob(X, K, pMu, pSigma)pGamma = Px*np.tile(pPi, (N, 1))pGamma = pGamma/np.tile(np.sum(pGamma, axis=1).reshape(N,1), (1, K))Nk = np.sum(pGamma, axis=0)pMu = np.dot(np.dot(np.diag(1/Nk), pGamma.T), X)pPi = Nk/Nfor i in range(K):Xshift = X-np.tile(pMu[i], (N, 1))pSigma[i] = np.dot(Xshift.T, np.dot(np.diag(pGamma[:, i]), Xshift))/Nk[i]L = np.sum(np.log(np.dot(Px, pPi.T)), axis=0)if L-Loss < threshold:breakLoss = Lreturn Px,pMu,pSigma,pPiif __name__ == "__main__":        Data_list = []with open("data.txt", 'r') as file:for line in file.readlines():  point = []  point.append(float(line.split()[0]))  point.append(float(line.split()[1]))  Data_list.append(point)  Data = np.array(Data_list)Px,pMu,pSigma,pPi = gmm(Data, 2)print(Px,pMu,pSigma,pPi)

Ref

  1. 高斯混合模型(GMM)
  2. 高斯混合模型白板推导
  3. 隐变量是什么
  4. 详解EM算法与混合高斯模型(Gaussian mixture model, GMM)
  5. 高斯混合模型(GMM)的两种详解及简化

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/532422.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

十个模块_专栏 | ABAQUS Part模块的十个小技巧

作者介绍星辰_北极星2012年开始从事Abaqus仿真相关工作&#xff0c;服务大小课题逾百项; 主要仿真领域&#xff1a;石油工程、岩土工程和金属加工工艺&#xff1b; 重点研究方向&#xff1a;ABAQUS GUI二次开发、固体力学、断裂以及损伤等。Abaqus有部件(Part)和装配体(Assembl…

深度学习时代的视频理解综述

深度学习时代的视频理解综述 本文为b站bryanyzhu老师四期视频理解相关论文解读的汇总图文笔记。 我们先精读深度学习时代视频理解领域最为重要的两篇论文&#xff1a;双流网络和 I3D。它们分别是领域内两大类方法双流&#xff08;利用光流&#xff09;网络和 3D CNN 网络的代…

typec扩展坞hdmi没反应_typec扩展坞转hdmi/vga多功能网口usb转换器苹果华为电脑matebook6元优惠券券后价26.8元...

★typec扩展坞转hdmi/vga多功能网口usb转换器苹果华为电脑matebook&#xff0c;6元拼多多优惠券★券后价26.8元★★★typec扩展坞转hdmi/vga多功能网口usb转换器苹果华为电脑matebook&#xffe5;26.8元&#xffe5;32.8元已拼5097件点击抢购猜你喜欢[速发]喵喵机P1热敏打印机手…

NLP任务概览

NLP任务概览 本文为台湾大学李宏毅老师视频课程笔记。本课程介绍了 &#xff08;2020年&#xff09;NLP 领域常见的 17 种任务。本文只会从输入输出的角度概览多种 NLP 任务&#xff0c;并简介它们的常见做法&#xff0c;并不会细致地介绍每个任务模型的具体细节。 两种模式与…

大物实验总结模板_期中总结大会amp;期末动员大会

在逐渐降温的双创周麦包坊的期中总结暨期末动员大会来啦在学长团和小麦包的分享下希望大家重新启航奋斗期末板块一学长团经验分享面对本学期十二门科目&#xff0c;作为过来人的前辈们给出很多对本学期各科目的针对性建议&#xff0c;可谓是干货满满&#xff0c;快来瞧瞧吧&…

PTMs:NLP预训练模型的全面总结

PTMs&#xff1a;NLP预训练模型的全面总结 转自&#xff1a;https://zhuanlan.zhihu.com/p/115014536 预训练模型(Pre-trained Models,PTMs) 的出现将NLP带入了一个全新时代。2020年3月18日&#xff0c;邱锡鹏老师发表了关于NLP预训练模型的综述《Pre-trained Models for Natur…

python中提取几列_Python一键提取PDF中的表格到Excel(实例50)

从PDF文件获取表格中的数据&#xff0c;也是日常办公容易涉及到的一项工作。一个一个复制吧&#xff0c;效率确实太低了。用Python从PDF文档中提取表格数据&#xff0c;并写入Excel文件&#xff0c;灰常灰常高效。上市公司的年报往往包含几百张表格&#xff0c;用它作为例子再合…

详解最大似然估计(MLE)、最大后验概率估计(MAP),以及贝叶斯公式的理解

详解最大似然估计&#xff08;MLE&#xff09;、最大后验概率估计&#xff08;MAP&#xff09;&#xff0c;以及贝叶斯公式的理解 声明&#xff1a;本文为原创文章&#xff0c;发表于nebulaf91的csdn博客。欢迎转载&#xff0c;但请务必保留本信息&#xff0c;注明文章出处。 本…

重新打开_iPhone 应用停止响应或无法打开的解决办法

如果当您在 iPhone 上使用某个重要应用时&#xff0c;遇到应用停止响应、意外退出或无法打开的问题&#xff0c;请参考如下步骤尝试解决&#xff1a;1.强制退出应用&#xff1a;在 iPhone 后台强制关闭该应用之后&#xff0c;再次重新打开看看。2.重启您的设备&#xff0c;然后…

机器学习理论——优雅的模型:变分自编码器(VAE)

机器学习理论——优雅的模型&#xff1a;变分自编码器&#xff08;VAE&#xff09; 转自&#xff1a;机器学习理论—优雅的模型&#xff08;一&#xff09;&#xff1a;变分自编码器&#xff08;VAE&#xff09; 另外直观理解 VAE&#xff0c; 推荐 台大李宏毅老师的课程&#…

基于流的(Flow-based)生成模型简介

基于流的(Flow-based)生成模型简介 生成任务 我们先回顾一下所谓的生成任务&#xff0c;究竟是做什么事情。我们认为&#xff0c;世界上所有的图片&#xff0c;是符合某种分布 pdata(x)p_{data}(x)pdata​(x) 的。当然&#xff0c;这个分布肯定是个极其复杂的分布。而我们有一…

iec60870-5-104通讯协议编程_三菱FX编程口通讯协议1——协议解读

三菱PLC编程口通讯协议&#xff1a;1、三菱PLC编程口通讯协议有四个命令&#xff0c;如下&#xff1a;2、三菱FX系列PLC地址对应表&#xff1a;PLC_X Group Base AddRess128&#xff1b;Const PLC_Y_Group Base AddRess160&#xff1b;M _Group Base_AddRess 256&#xff1b;P…

DETR精读笔记

DETR精读笔记 论文&#xff1a;End-to-End Object Detection with Transformers &#xff08;发表于 ECCV-2020&#xff09; 代码&#xff1a;https://github.com/facebookresearch/detr 解读视频&#xff1a;DETR 论文精读【论文精读】 本笔记主要基于 Yi Zhu 老师的解读 引言…

GAN网络评估指标:IS、FID、PPL

GAN网络评估指标&#xff1a;IS、FID、PPL 转自&#xff1a;IS、FID、PPL&#xff0c;GAN网络评估指标 另外关于GAN的评价指标&#xff0c;推荐李宏毅老师的视频&#xff1a;【機器學習2021】生成式對抗網路 (Generative Adversarial Network, GAN) (三) – 生成器效能評估與條…

降维后输入分类器分类时报错_逻辑回归解决多分类方法及其优缺点分析

众所周知&#xff0c;逻辑回归常用于解决二分类任务&#xff0c;但是在工作/学习/项目中&#xff0c;我们也经常要解决多分类问题。本文总结了 3 种逻辑回归解决多分类的方法&#xff0c;并分析了他们的优缺点。一、One-Vs-Rest假设我们要解决一个分类问题&#xff0c;该分类问…

PyTorch 的 Autograd

PyTorch 的 Autograd 转自&#xff1a;PyTorch 的 Autograd PyTorch 作为一个深度学习平台&#xff0c;在深度学习任务中比 NumPy 这个科学计算库强在哪里呢&#xff1f;我觉得一是 PyTorch 提供了自动求导机制&#xff0c;二是对 GPU 的支持。由此可见&#xff0c;自动求导 (a…

商场楼层导视牌图片_百宝图商场电子导视软件中预约产品功能简介

百宝图商场电子导视软件中预约产品功能简介 管理端&#xff0c;可配合百宝图商场电子导视软件配套使用 1&#xff1a;数据展示&#xff1a;图形展示总预约数/预约时间峰值/预约途径/各途径数量对比 2&#xff1a;数据统计&#xff1a;有效预约数量/无效预约数量/无效预约原因备…

Pytorch autograd.grad与autograd.backward详解

Pytorch autograd.grad与autograd.backward详解 引言 平时在写 Pytorch 训练脚本时&#xff0c;都是下面这种无脑按步骤走&#xff1a; outputs model(inputs) # 模型前向推理 optimizer.zero_grad() # 清除累积梯度 loss.backward() # 模型反向求导 optimizer.step()…

相对熵与交叉熵_熵、KL散度、交叉熵

公众号关注 “ML_NLP”设为 “星标”&#xff0c;重磅干货&#xff0c;第一时间送达&#xff01;机器学习算法与自然语言处理出品公众号原创专栏作者 思婕的便携席梦思单位 | 哈工大SCIR实验室KL散度 交叉熵 - 熵1. 熵(Entropy)抽象解释&#xff1a;熵用于计算一个随机变量的信…

动手实现一个带自动微分的深度学习框架

动手实现一个带自动微分的深度学习框架 转自&#xff1a;Automatic Differentiation Tutorial 参考代码&#xff1a;https://github.com/borgwang/tinynn-autograd (主要看 core/tensor.py 和 core/ops.py) 目录 简介自动求导设计自动求导实现一个例子总结参考资料 简介 梯度…