原理解读
GMM(Gaussian Mixture Model,):是一个将事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型,混合高斯分布( MoG )由多个混合成分组成,每一个混合成分对应一个高斯分布。当聚类问题中各个类别的尺寸不同、聚类间有相关关系的时候,往往使用 MoG 更合适。对一个样本来说, MoG 得到的是其属于各个类的概率(通过计算后验概率得到),而不是完全的属于某个类,这种聚类方法被成为软聚类。一般说来, 任意形状的概率分布都可以用多个高斯分布函数去近似,因而,MoG 的应用也比较广泛。
步骤分析
1. 选择高斯模型个数K,初始化参数
  2. 根据贝叶斯定理,求出zj的后验分布概率
$$p(z_j=i | x_j) = \frac{\alpha_i \cdot p(x_j | \mu_i , \Sigma_i)}{\displaystyle \sum_{l=1}^k \alpha_l \cdot p(x_j | \mu_l , \Sigma_l)}$$
3. 使用EM算法进行迭代
- 计算均值向量: 
 $$\mu_i ‘=\frac{\displaystyle \sum_{j=1}^m p(z_j=i | x_j) \cdot x_j}{\displaystyle \sum_{j=1}^m p(z_j=i | x_j)}$$
- 计算协方差矩阵: 
 $$\Sigma_i ‘=\frac{\displaystyle \sum_{j=1}^m p(z_j=i | x_j) \ (x_j - \mu_i ‘) \ (x_j - \mu_i ‘)^T}{\displaystyle \sum_{j=1}^m p(z_j=i | x_j)}$$
- 计算混合系数: 
 $$\alpha_i ‘=\frac{\displaystyle \sum_{j=1}^m p(z_j=i | x_j)}{m}$$
4. 重复步骤1,2,直到满足某个终止条件
  5. 定义高斯混合分布
  根据所求得的均值向量,协方差矩阵和混合系数可以定义如下函数:
$$p(x)=\displaystyle \sum_{l=1}^k \alpha_i \cdot p(x | \mu_i , \Sigma_i) \ , \ s.t. \displaystyle \sum_{l=1}^k \alpha_i=1$$
  6. 对样本进行标记
$$\lambda_j=\underset{i \in { 1,2, \cdots ,k}}{arg\ max} \ p(z_j=i | x_j)$$
算法流程

代码实战
代码中所用数据集可以查看相关文档,数据集(Data Set)
GMM_main.m
| 1 | clear;clc;close all; | 
GMM_classify.m
| 1 | function y=GMM_classify(x_scale,sample_num,class_num,feat_num) | 
GMM_display.m
| 1 | function GMM_display(x,y,sample_num,class_num) | 
实验结果

性能比较
- 优点:- 可以完成大部分形状的聚类
- 大数据集时,对噪声数据不敏感
- 对于距离或密度聚类,更适合高维特征
 
- 缺点:- 计算复杂,速度较慢
- 难以对圆形数据聚类
- 需要在测试前知道类别的个数
- 初始化参数会对聚类结果产生影响