Skip to content

Commit 4e63a3b

Browse files
Update README.md
1 parent 1660e7b commit 4e63a3b

1 file changed

Lines changed: 9 additions & 80 deletions

File tree

em/README.md

Lines changed: 9 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,9 @@
1-
# 1. 前言
2-
前面几篇博文对EM算法和GMM模型进行了介绍,本文我们通过对GMM增加一个惩罚项。
3-
4-
# 2. 不带惩罚项的GMM
5-
原始的GMM的密度函数是
6-
$$
7-
p(\boldsymbol{x}|\boldsymbol{\pi},\boldsymbol{\mu},\boldsymbol{\Sigma})=\sum_{k=1}^K\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)
8-
$$
9-
$$
10-
\sum_{k=1}^K\pi_k=1
11-
$$
12-
其中$K$是高斯组件的个数,$[\pi_1,\pi_2,...,\pi_k]$是每个组件的权重。其中的$\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k$是组件$k$的均值和协方差矩阵。
13-
14-
log极大似然函数的公式是:
15-
$$
16-
L(\theta,\theta^{(j)})=\sum_{k=1}^Kn_k[log\pi_k-\frac{1}{2}(log(\boldsymbol{\Sigma_k})+\frac{{(x_i-\boldsymbol{\mu}_k})^2}{\boldsymbol{\Sigma}_k})]\;\;\;\;\;(1)
17-
$$
18-
19-
这里有一个响应度的变量$\gamma_{ik}$,响应度$\gamma_{ik}$代表了第$i$个样本,在第$k$个组件上的响应程度。响应度的计算公式也很简单。
20-
$$
21-
\gamma_{ik}=\frac{\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)}{\sum_{k=1}^K\pi_k\mathcal{N}(\boldsymbol{x}|\boldsymbol{\mu}_k,\boldsymbol{\Sigma}_k)}
22-
$$
23-
24-
通过$L(\theta, \theta^{j})$对$\mu_k$,$\Sigma_k$求偏倒等于0得到
25-
26-
$$
27-
\mu_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}x_i\;\;\;\;\;(2)
28-
$$
29-
$$
30-
\Sigma_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}(x_i-\mu_k)^2
31-
$$
32-
$$
33-
\pi_k=\frac{n_k}{N}
34-
$$
35-
其中的$n_k=\sum_{i=1}^N\gamma_{ik}$。
36-
37-
到这里为止我们不带惩罚项的所有变量都计算出来了,只要一直循环E步M步,就能使得loglikelihood最大化。
38-
39-
# 3. 带惩罚项的GMM
40-
在带penality的GMM中,我们假设协方差是一个对角矩阵,这样的话,我们计算高斯密度函数的时候,只需要把样本各个维度与对应的$\mu_k$和$\sigma_k$计算一维高斯分布,再相加即可。不需要通过多维高斯进行计算,也不需要协方差矩阵是半正定的要求。
41-
42-
我们给上面的(1)式加入一个惩罚项,
43-
$$
44-
\lambda\sum_{k=1}^K\sum_{j=1}^P\frac{|\mu_k-\bar{x}_j|}{s_j}
45-
$$
46-
其中的$P$是样本的维度。$\bar{x}_j$表示每个维度的平均值,$s_j$表示每个维度的标准差。这个penality是一个L1范式,对$\mu_k$进行约束。
47-
48-
加入penality后(1)变为
49-
$$
50-
L(\theta,\theta^{(j)})=\sum_{k=1}^Kn_k[log\pi_k-\frac{1}{2}(log(\boldsymbol{\Sigma_k})+\frac{{(x_i-\boldsymbol{\mu}_k})^2}{\boldsymbol{\Sigma}_k})] - \lambda\sum_{k=1}^K\sum_{j=1}^P\frac{|\mu_k-\bar{x}_j|}{s_j}
51-
$$
52-
53-
这里需要注意的一点是,因为penality有一个绝对值,所以在对$\mu_k$求导的时候,需要分情况。于是(2)变成了
54-
$$
55-
\mu_k=\frac{1}{n_k}\sum_{i=1}^N\gamma_{ik}x_i
56-
$$
57-
$$
58-
\mu_k=
59-
\left \{\begin{array}{cc}
60-
\frac{1}{n_k}(\sum_{i=1}^N\gamma_{ik}x_i - \frac{\lambda\sigma^2}{s_j}), & \mu_k >= \bar{x}_j\\
61-
\frac{1}{n_k}(\sum_{i=1}^N\gamma_{ik}x_i + \frac{\lambda\sigma^2}{s_j}), & \mu_k < \bar{x}_j
62-
\end{array}\right.
63-
$$
64-
65-
## 3.1 注意点
66-
67-
- 在带有penality的GMM中,如果从一开始迭代时,$\lambda>0$那这时loglikelihood很容易陷入一个局部最大值。如果前几个迭代我们先令$\lambda=0$,而后在令$\lambda>0$,这样能够寻找到一个比较好的最大值点。
68-
- 由于在算EM的时候,很容易出现underflow活着overflow,这是我们可以通过一个近似公式来避开这个问题。
69-
$$
70-
log(\sum_hexp(a_h)) = m + log(\sum_hexp(a_h - m))\;\;\;m=max(a_h)
71-
$$
72-
- 初始值很影响EM的聚类的结果,所以我们需要改变seed来多次运行程序,寻找导最好的EM结果。
73-
74-
75-
# 4. 总结
76-
77-
本文对GMM模型进行了改良,加入了L1的penality项,使得$\mu_k$不会偏离$\bar{x}_j$太大,导致过拟合。下一篇博客通过代码,详细的展示这个过程。
78-
79-
80-
1+
# 实现em gmm算法
2+
高斯混合模型(GMM 聚类)的 EM 算法实现。
3+
4+
# 相关文章
5+
#### [1. EM算法-数学基础](https://www.cnblogs.com/huangyc/p/10123320.html)
6+
#### [2. EM算法-原理详解](https://www.cnblogs.com/huangyc/p/10123780.html)
7+
#### [3. EM算法-高斯混合模型GMM](https://www.cnblogs.com/huangyc/p/10125117.html)
8+
#### [4. EM算法-高斯混合模型GMM详细代码实现](https://www.cnblogs.com/huangyc/p/10274881.html)
9+
#### [5. EM算法-高斯混合模型GMM+Lasso](https://www.cnblogs.com/huangyc/p/10275131.html)

0 commit comments

Comments
 (0)