# 高斯混合模型参数估计的EM算法

[高斯混合模型](https://windmising.gitbook.io/mathematics-basic-for-ml/gai-shuai-lun/mixture_distribution)

**输入：**\
观测数据y1, y2, ... yN\
高斯混合模型

**输出：**\
高斯混合模型参数

**步骤：**\
1\. 取参数的初值开始迭代\
2\. E步：依据当前模型参数，计算分模型k对观测数据yj的响应度

$$
\hat \gamma\_{jk} = \frac{a\_k\phi(y\_j|\theta\_k)}{\sum\_{k=1}^Ka\_k\phi(y\_j|\theta\_k)}
$$

1. M步：计算新一轮迭代的参数模型 &#x20;

   $$
   \begin{aligned}
   \hat \mu\_k = \frac{\sum\_{j=1}^N\hat \gamma\_{jk}y\_j}{\sum\_{j=1}^N\hat \gamma\_{jk}}  \\
   \hat \sigma^2 =  \frac{\sum\_{j=1}^N\hat \gamma\_{jk}(y\_j-\mu\_k)}{\sum\_{j=1}^N\hat \gamma\_{jk}}  \\
   \hat a\_k = \frac{\sum\_{j=1}^N\hat \gamma\_{jk}}{N}
   \end{aligned}
   $$
2. 重复（2）（3），直至收敛。 &#x20;

## E应该求Q函数，为什么求$$\hat \gamma\_{jk}$$?

在混合高斯模型中，完整的Q函数为：

$$
Q(\theta, \theta^{(i)}) = \sum\_{k=1}^K\left(\sum\_{j=1}^N(E\gamma\_{jk})\log a\_k + \sum\_{j=1}^N(E\gamma\_{jk})\left(\log \frac{1}{\sqrt{2\pi}} - \log \sigma\_k - \frac{1}{2\sigma\_k^2}(y\_j-\mu\_k)^2\right)\right)
$$

从公式可以看出，除了$$\theta$$以为，还要求$$E\gamma\_{jk}$$，令：

$$
\hat \gamma\_{jk} = E\gamma\_{jk}
$$

Q函数求出来后，求要对$$\theta$$求导，以解出$$\theta^{new}$$\
解出发现$$\theta^{new}$$只与$$E\gamma\_{jk}$$，所以求出$$E\gamma\_{jk}$$即可进行M步。
