matlab下混合高斯模型的EM算法实现。
参数说明
N:样本数
M:Gauss数
高斯模型
模型表示
$$N(\mathbf{x;\mu,\Sigma})=\frac{1}{(2\pi)^{\frac{d}{2}}|\mathbf{\Sigma}|^{\frac{1}{2}}\exp{-\frac{1}{2}(\mathbf{x-\mu})^T\mathbf{\Sigma}^{-1}(\mathbf{x-\mu})}}$$
其中,d 为维数。
最大似然估计
$$L(\theta)=\sum_{n=1}^N\log N(\mathbf{x}_n;\mathbf{\mu,\Sigma})=-\frac{1}{2}\sum_{n=1}^N{d\log(2\pi)+\log|\mathbf{\Sigma}|+(\mathbf{x}_n-\mathbf{\mu})^T\mathbf{\Sigma}^{-1}(\mathbf{x}_n-\mathbf{\mu})}$$
得到的参数估计为:
$$\mathbf{\hat\mu}=\frac{1}{N}\sum_{n=1}^N\mathbf{x}_n$$
$$\mathbf{\hat\Sigma}=\frac{1}{N}\sum_{n=1}^N(\mathbf{x}_n-\mathbf{\hat\mu})(\mathbf{x}_n-\mathbf{\hat\mu})^T$$
混合高斯模型
模型表示
$$p(\mathbf{x})=\sum_{m=1}^Mc_mN(\mathbf{x;\mu}_m,\mathbf{\Sigma}_m))$$
$$s.t. \sum_{m=1}^Mc_m=1$$
最大似然估计
$$L(\theta)=\sum_{n=1}^N\log\left(\sum_{m=1}^Mc_mN(\mathbf{x}_n;\mathbf{\mu}_m,\mathbf{\Sigma}_m)\right)$$
$$\gamma_m(n)=P(m;\mathbf{x_n},\hat\theta)=\frac{p(\mathbf{x}_n;m,\hat\theta)P(m;\hat\theta)}{\sum\limits_{k=1}^Mp(\mathbf{x}_n;k,\hat\theta)P(k;\hat\theta)}$$
$$Q(\theta;\hat\theta)=K+\sum_{n=1}^N\sum_{m+1}^M\gamma_m(n)\log c_m-\frac{1}{2}\sum_{n=1}^N\sum_{m+1}^M\gamma_m(n)\left(\log|\mathbf{\Sigma}_m|+(\mathbf{x}_n-\mathbf{\mu}_m)^T\mathbf{\Sigma}_m^{-1}(\mathbf{x}_n-\mathbf{\mu}_m)\right)$$
EM算法步骤
- 初始化参数$k=0$。假设只有单Gauss,估计其模型参数$\mathbf{\mu}_0$,$\mathbf{\Sigma}_0$。对于混合高斯模型中的M个Gauss,采用全局初始化参数$\mathbf{\mu}_0$,$\mathbf{\Sigma}_0$加一随机移动(使得M个Gauss不同,否则等同于单Gauss),作为它们的初始化参数。
- 迭代次数$k:=k+1$。对于每个样本$\mathbf{x}_n$,采用$\theta^{k-1}$ 计算后验概率$\gamma_m^{(k)}(n)$.
$$\gamma_m^{(k)}(n)=\frac{c_m^{(k-1)}N(\mathbf{x}_n;\mathbf{\mu}_m^{(k-1)},\mathbf{\Sigma}_m^{(k-1)})}{\sum_{j=1}^Mc_m^{(k-1)}N(\mathbf{x}_n;\mathbf{\mu}_j^{(k-1)},\mathbf{\Sigma}_j^{(k-1)})}$$ - 更新模型参数$\theta^{(k)}={c_m^{(k)},\mathbf{\mu}_m^{(k)},\mathbf{\Sigma}_m^{(k)}}$
$$\gamma_m=\sum_{n=1}^N\gamma_m(n)$$
$$\mathbf{\hat\mu}_m=\frac{1}{\gamma_m}\sum_{n=1}^N\gamma_m(n)\mathbf{x}_n$$
$$\mathbf{\hat\Sigma}_m=\frac{1}{\gamma_m}\sum_{n=1}^N\gamma_m(n)(\mathbf{x}_n-\mathbf{\hat\mu}_m)(\mathbf{x}_n-\mathbf{\hat\mu}_m)^T$$
$$\hat c_m=\frac{\gamma_m}{\sum\limits_{m=1}^M\gamma_m}$$ - 重复步骤 2,3 直至模型收敛。
程序实现
初始化参数
|
|
EM 算法
|
|