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-高斯混合模型的主要内容,如果未能解决你的问题,请参考以下文章