目录

高斯混合聚类

目录

基础就是高斯混合模型,假设我们熟知的高斯分布的概率密度函数为\(p(x\mid \mu, \Sigma)\)。则高斯混合分布为:

\[ p_{\mathcal{M}}(\boldsymbol{x})=\sum_{i=1}^k \alpha_i \cdot p\left(\boldsymbol{x} \mid \boldsymbol{\mu}_i, \boldsymbol{\Sigma}_i\right) \]

分布共由 \(k\) 个混合成分组成, 每个混合成分对应一个高斯分布. 其中 \(\mu_i\)\(\Sigma_i\) 是第 \(i\) 个高斯混合成分的参数, 而 \(\alpha_i>0\) 为相应的 “混合系数” (mixture coefficient), \(\sum_{i=1}^k \alpha_i=1\)。 假设样本的生成过程由高斯混合分布给出: 首先, 根据 \(\alpha_1, \alpha_2, \ldots, \alpha_k\) 定义 的先验分布选择高斯混合成分, 其中 \(\alpha_i\) 为选择第 \(i\) 个混合成分的概率; 然后, 根 据被选择的混合成分的概率密度函数进行采样, 从而生成相应的样本。

聚类原理

如何利用高斯混合分布进行聚类?观察这个混合系数,思路就是有多少个混合的模型,就代表要聚多少类,对于给定数据集,可以定义

\[ \gamma_{j k}= \begin{cases}1, & \text { 第 } j \text { 个观测来自第 } k \text { 个分模型 } \\\\ 0, & \text { 否则 }\end{cases} \]

则样本j的簇标记\(\lambda_j= \underbrace{\arg \max}_{i\in {1,2, \dots ,k}} \gamma_{jk}\)

EM算法

如何计算\(\gamma_{jk}\)呢,如下式所示,其中\(\alpha_k\)为混合系数,\(\theta_k\)为第k个高斯分布的参数

\[ \begin{aligned} \hat{\gamma}_{j k} &=E\left(\gamma_{j k} \mid y, \theta\right)=P\left(\gamma_{j k}=1 \mid y, \theta\right) \\\\ &=\frac{P\left(\gamma_{j k}=1, y_j \mid \theta\right)}{\sum_{k=1}^K P\left(\gamma_{j k}=1, y_j \mid \theta\right)} \\\\ &=\frac{P\left(y_j \mid \gamma_{j k}=1, \theta\right) P\left(\gamma_{j k}=1 \mid \theta\right)}{\sum_{k=1}^K P\left(y_j \mid \gamma_{j k}=1, \theta\right) P\left(\gamma_{j k}=1 \mid \theta\right)} \\\\ &=\frac{\alpha_k \phi\left(y_j \mid \theta_k\right)}{\sum_{k=1}^K \alpha_k \phi\left(y_j \mid \theta_k\right)}, \quad j=1,2, \cdots, N ; \quad k=1,2, \cdots, K \end{aligned} \]

式子里的y其实就是观测样本。

那么模型的参数要怎么估计呢,很显然可以使用EM算法,\(\gamma\)为隐变量,其实我这里的叙述顺序是有问题的,其实是EM算法中求Q函数的过程中需要计算的一个值,详细的过程在本博客的EM算法里面。总之得到了\(\gamma_{jk}\)后,就得到了Q函数:

\[ Q\left(\theta, \theta^{(i)}\right)=\sum_{k=1}^K\{n_k \log \alpha_k+\sum_{j=1}^N \hat{\gamma}_{j k}\left[\log \left(\frac{1}{\sqrt{2 \pi}}\right)-\log \sigma_k-\frac{1}{2 \sigma_k^2}\left(y_j-\mu_k\right)^2\right]\} \]

极大似然估计Q函数就可以得到参数的下一轮估计值:

\[ \theta^{(i+1)}=\arg \max_\theta Q\left(\theta, \theta^{(i)}\right) \]

\(\hat{\mu}_k, \hat{\sigma}_k^2\)\(\hat{\alpha}_k, k=1,2, \cdots, K\), 表示 \(\theta^{(i+1)}\) 的各参数。求 \(\hat{\mu}_k, \hat{\sigma}_k^2\) 只需分别对 \(\mu_k, \sigma_k^2\) 求偏导数并令其为 0 , 即可得到; 求 \(\hat{\alpha}_k\) 是在 \(\sum_{k=1}^K \alpha_k=1\) 条件 下求偏导数并令其为 0 得到的。结果如下:

\[ \begin{gathered} \hat{\mu}_k=\frac{\sum_{j=1}^N \hat{\gamma}_{j k} y_j}{\sum_{j=1}^N \hat{\gamma}_{j k}}, \quad k=1,2, \cdots, K \\\\ \hat{\sigma}_k^2=\frac{\sum_{j=1}^N \hat{\gamma}_{j k}\left(y_j-\mu_k\right)^2}{\sum_{j=1}^N \hat{\gamma}_{j k}}, \quad k=1,2, \cdots, K \\\\ \hat{\alpha}_k=\frac{n_k}{N}=\frac{\sum_{j=1}^N \hat{\gamma}_{j k}}{N}, \quad k=1,2, \cdots, K \end{gathered} \]

得到参数后,再进行新的一轮迭代,计算\(\gamma\)值,如此反复。 算法收敛后,就可以对样本进行聚类,根据\(\lambda_j= \underbrace{\arg \max}_{i\in {1,2, \dots ,k}} \gamma_{jk}\)可以得到每个样本的簇标记。具体的流程如下:

总结

高斯混合分布的形式就注定了它可以用来进行聚类,并且还有EM算法如此强大的数学工具进行模型参数的学习,高斯混合聚类与Kmeans都属于原型聚类。