EM-高斯混合模型

Posted 致于数据科学家的小陈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了EM-高斯混合模型相关的知识,希望对你有一定的参考价值。

用极大似然来求解参数, 求导很有技巧,之前跟之前LDA相似, 还得用拉格朗日乘子求条件极值

EM-高斯混合模型

认识

前面为了直观认识 EM 算法, 用的"扔硬币"的案例, 是为了简化和直观, 而稍微偏应用和深入一点是高斯模型分类,这样一个话题.

就好比我们现在有一堆的数据点, 已经知道是来自于不同的 k 个类别, 每个类别又服从各自的高斯分布, 即k个不同的 (\\(\\mu, \\sigma\\))

需求: 求解出这 k 个高斯模型的参数

但现实是, 对于某一个点, 我们并不知道是来自于哪个类别, 因此只能认为任何一个点是这 k 个类别(模型) 的混合(Mixture) 结果.

对某一个点 xi, 它可能有 0.3的概率来自A类, 0.2概率来自B类, 0.1概率来自C类.... 这也是一个概率分布

Mixture of Gaussian 定义

给定一个有 n 个训练数据的集合, \\(D=\\ x_1, x_2, x_3, ..x_n\\\\)

\\(p(x_i, z_i) = p(z_i)p(x_i|z_i)\\), 其中, 假设有 k 个类别分布.

  • \\(z_i \\rightarrow 多元正态分布(\\phi)\\) 其中 \\(\\phi\\)
  • \\(\\phi _j = p(z_i =j) 且 p(z_i | x_i = j) \\rightarrow N(\\mu_j, \\Sigma_j)\\)
  • \\(\\sum \\limits_j=1^k \\phi_j = 1\\)

即在一共有 k 个高斯模型下, \\(\\phi_j\\) 为混合模型中的第 j 个高斯模型占的权重. 设 k 为 \\(z_i\\) 的可能取值上限即每个xi 的产生:

  • 随机从 1,2,3,....k 中选择一个 \\(z_i\\)
  • 然后从 \\(z_i\\) 对应的高斯分布中产生 \\(x_i\\)
  • \\(z_i\\) 为不能直接观测到的隐含变量, \\(\\phi, \\mu, \\Sigma\\)

E步: 让 \\(\\mu, \\Sigma\\) 不变, 更新 \\(\\phi\\)

M步: 让 \\(\\phi\\) 不变, 更新 \\(\\mu, \\Sigma\\)

对应的对数似然函数如下:

\\(l(\\phi, \\mu, \\Sigma) = \\sum \\limits _i=1^n \\ p(x_i; \\phi, \\mu, \\Sigma)\\)

\\(= \\sum \\limits _i=1^n log \\ \\sum \\limits _z_i=1^k p(x_i | z_i; \\mu, \\Sigma) p(z_i; \\phi)\\)

这是个全概率分布: \\(\\phi \\rightarrow z_i \\rightarrow x_i\\)

给定 \\(\\phi\\) 下, \\(z_i\\) 的分布; 给定 \\(z_i\\) 下, \\(x_i\\)的分布

参数估计

核心还是似然函数和贝叶斯公式

**E 步: ** 为第 i 个数据, 其所属 k 个类别中的 第 j 个类别的概率分布 (有点绕哈):

\\(w_j^(i) = Q_i(z_i = j) = P(z_i = j | x_i; \\phi, \\Sigma, \\mu)\\)

即给定 \\(\\phi, \\mu, \\Sigma, x_i\\) 的条件下, \\(P(z_i = j)\\)

M 步: 最大化似然函数:

\\(\\sum \\limits _i=1^n \\sum \\limits_z_i =1^k Q_i(z_i) \\ log \\frac p(x_i, z_i; \\phi, \\mu, \\Sigma)Q_i(z_i)\\)

即已知 \\(x_i, z_i\\) 的条件下, 去更新 \\(\\mu, \\Sigma\\)

\\(=\\sum \\limits _i=1^n \\sum \\limits_j =1^k Q_i(z_i =j) \\ log \\frac p(x_i | z_i=j; \\mu, \\Sigma)p(z_i =j; \\phi)Q_i(z_i=j)\\)

\\(=\\sum \\limits _i=1^n \\sum \\limits_j =1^k w_j^(i) \\ log \\frac \\frac 1(2 \\pi)^0.5n|\\Sigma|^0.5exp(-0.5(x_i - \\mu_j)^T \\Sigma_j^-1(x_i -\\mu_j))* \\phi_jw_j^(i)\\)

\\(w_j^(i)\\)

但更新 \\(\\Sigma_j, \\mu_j\\)

只能分别对 \\(\\Sigma, \\mu\\) 来求偏导了呀, 于是, 对期望 \\(\\mu_l\\) 求偏导( \\(\\mu_l\\) 表示 \\(j = l\\)

\\(\\nabla_\\mu_l=\\sum \\limits _i=1^n \\sum \\limits_ j=1^k w_j^(i) \\ log \\frac \\frac 1(2 \\pi)^0.5n|\\Sigma|^0.5exp(-0.5(x_i - \\mu_j)^T \\Sigma_j^-1(x_i -\\mu_j))* \\phi_jw_j^(i)\\)

化繁为简单, 利用 log 性质

上式相当于 \\(log(\\frac abcd) = loga + logb +logc - logd\\)

即原式对 \\(\\mu_j\\) 求导, 只跟中间的那项有关, 跟 exp 前面的高斯项, 还是 \\(\\phi_j\\)

\\(\\nabla_\\mu_l=\\sum \\limits _i=1^n \\sum \\limits_z_i =1^k w_j^(i) \\ log-0.5(x_i - \\mu_j)^T \\Sigma_j^-1(x_i -\\mu_j)\\)

只是对 \\(\\mu_l\\) 求导, 只有当 j = l 的时候呢, 才会考虑 这 \\(\\sum\\)求和, 即求和是没有真正起作用的, 可以直接去掉

\\(=\\sum \\limits _i=1^n w_j^(i) \\nabla_\\mu_l \\ log-0.5(x_i - \\mu_j)^T \\Sigma_j^-1(x_i -\\mu_j)\\)

$=0.5 \\sum \\limits i=1^n w_l^(i) \\nabla\\mu_l2\\mu_l^T \\Sigma_l ^-1x_i - \\mu_l^T \\Sigma_l^-1\\mu_l $

\\(=\\sum \\limits _i=1^n w_l^(i) ( \\Sigma_l ^-1x_i -\\Sigma_l^-1\\mu_l)\\)

令其等于 0 即:

\\(\\mu_l = \\frac \\sum \\limits _i=1^n w_l^(i) x_i\\sum \\limits _i=1^n w_l^(i) \\)

同理 再对 \\(\\Sigma\\)

\\(\\Sigma_j = \\frac \\sum \\limits _i=1^n w_j^(i) (x_i -\\mu_j)(x_i-\\mu_j)^T\\sum \\limits _i=1^n w_j^(i)\\)

同理 对 \\(\\phi_j\\) 求偏导, 只保留包含 \\(\\phi_j\\)

\\(\\sum \\limits _i=1^n \\sum \\limits_j =1^k w_j^(i) log(\\phi_j)\\)

回顾上文, \\(\\phi_j = p(z_i = j; \\phi)\\) 是一个概率分布, \\(\\sum_j=1^k \\phi_j = 1\\) 即是一个求条件极值的经典问题, 那很自然要引入到拉格朗日函数啦.

\\(l(\\phi) = \\sum \\limits _i=1^n \\sum \\limits_j =1^k w_j^(i) log(\\phi_j)- \\beta (\\sum \\limits _j=1^k \\phi_j -1)\\)

对 \\(\\phi_j\\)

同样对于 j = 1,2..k 来说, 其实 求和只是对满足条件的一项, 并未对其他产生作用

\\(\\nabla_\\phi_j l(\\phi) = \\sum \\limits_i=1^n \\frac w_j^(i)\\phi_j + \\beta\\)

这里的 求和 是对 i 哦, 跟 j 是没有关系滴

\\(\\phi_j = \\frac \\sum \\limits _i=1^n w_j^(i)-\\beta\\)

又因为 所有的 \\(\\phi\\)

\\(\\sum \\limits _j=1^k \\frac \\sum \\limits _i=1^n w_j^(i)-\\beta = 1\\)

\\(\\beta\\)

\\(\\frac 1-\\beta \\sum \\limits _j=1^k \\sum \\limits _i=1^n w_j^(i) = 1\\)

又因为 \\(w_j^(i) = Q_i(z_i = j)\\)

\\(\\frac 1-\\beta \\sum \\limits _i=1^n 1 = 1\\)

则: \\(-\\beta = n\\) 这样一来, 最终化简得出:

\\(\\phi_j = \\frac 1n \\sum \\limits_i=1^n w_j^(i)\\)

小结

重复执行 E, M 步骤, 直到收敛...

while True:

E-步: (即给定 \\(\\phi, \\mu, \\Sigma, x_i\\) 的条件下, \\(P(z_i = j)\\)

\\(w_j^(i) = Q_i(z_i = j) = P(z_i = j | x_i; \\phi, \\Sigma, \\mu)\\)

M-步: (更新参数 \\(\\Sigma, \\mu\\))

\\(\\mu_l = \\frac \\sum \\limits _i=1^n w_l^(i) x_i\\sum \\limits _i=1^n w_l^(i) \\)

\\(\\Sigma_j = \\frac \\sum \\limits _i=1^n w_j^(i) (x_i -\\mu_j)(x_i-\\mu_j)^T\\sum \\limits _i=1^n w_j^(i)\\)

\\(\\phi_j = \\frac 1n \\sum \\limits_i=1^n w_j^(i)\\)

IF 收敛:

break

总体上, 还是有点难度的感觉, 就是 大小类的层级关系 加上 条件概率, 真的是挺容易晕的, 也不太确定, 是否一定正确, 还是过后再来仔细检查一波.

耐心和恒心, 总会获得回报的.



以上是关于EM-高斯混合模型的主要内容,如果未能解决你的问题,请参考以下文章

6. EM算法-高斯混合模型GMM+Lasso详细代码实现

EM算法和混合高斯模型(一)

05 EM算法 - 高斯混合模型 - GMM

高斯混合模型(GMM)和EM算法

高斯混合模型GMM的EM算法实现(聚类)

EM-高斯混合模型