|
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