一、概述

以一维数据为例,我们可以看到下图通过将多个单一的高斯模型加权叠加到一起就可以获得一个高斯混合模型,这个混合模型显然具备比单个高斯模型更强的拟合能力:

高斯混合模型python实现 高斯混合模型例子_数据挖掘

再举一个二维数据的例子,在下图中可以看到有两个数据密集区域,对应的概率分布也就会有两个峰。高斯混合模型可以看做生成模型,其数据生成过程可以认为先选择一个高斯分布,再从被选择的高斯分布中生成数据:

高斯混合模型python实现 高斯混合模型例子_算法_02

综合上述两种描述,我们可以从两种角度来描述高斯混合模型:

  1. 几何角度:加权平均

可以认为高斯混合模型是将多个高斯分布加权平均而成的模型:

高斯混合模型python实现 高斯混合模型例子_数据挖掘_03

  1. 混合模型(或者生成模型)角度

可以认为高斯混合模型是一种含有隐变量的生成模型:

高斯混合模型python实现 高斯混合模型例子_算法_04:observed variable
高斯混合模型python实现 高斯混合模型例子_机器学习_05:latent variable

高斯混合模型python实现 高斯混合模型例子_数据挖掘_06是隐变量,表示对应的样本高斯混合模型python实现 高斯混合模型例子_人工智能_07属于哪一个高斯分布,其概率分为如下表:

高斯混合模型python实现 高斯混合模型例子_人工智能_07

高斯混合模型python实现 高斯混合模型例子_人工智能_07

高斯混合模型python实现 高斯混合模型例子_人工智能_07

高斯混合模型python实现 高斯混合模型例子_人工智能_07

可以认为这里的概率高斯混合模型python实现 高斯混合模型例子_高斯混合模型python实现_18就是几何角度加权平均中权重,两种角度的解释其实是一个意思。

我们可以画出高斯混合模型的概率图:

高斯混合模型python实现 高斯混合模型例子_数据挖掘_19

实心点代表模型的参数,右下角的高斯混合模型python实现 高斯混合模型例子_人工智能_20代表样本个数。

二、尝试用极大似然估计来求解

高斯混合模型python实现 高斯混合模型例子_高斯混合模型python实现_21:observed data高斯混合模型python实现 高斯混合模型例子_算法_22
高斯混合模型python实现 高斯混合模型例子_人工智能_23:comlete data
高斯混合模型python实现 高斯混合模型例子_人工智能_24:parameter高斯混合模型python实现 高斯混合模型例子_高斯混合模型python实现_25

以上为我们的数据以及需要求解的参数。接下来我们表示一下概率高斯混合模型python实现 高斯混合模型例子_人工智能_26:

高斯混合模型python实现 高斯混合模型例子_算法_27

然后我们使用极大似然估计法求解这个参数估计问题。首先告知结论:极大似然估计法无法求解含有隐变量的参数估计问题,或者说不能得到解析解。接下来来看为什么不能用极大似然估计法来求解:

高斯混合模型python实现 高斯混合模型例子_人工智能_28

极大似然估计法不能得到解析解的原因为高斯混合模型python实现 高斯混合模型例子_人工智能_29函数内部出现了求和符号。当然我们可以使用梯度下降法来进行求解,但是对于含有隐变量的模型来说使用EM算法是更为合适的。

三、使用EM算法求解

由于使用EM算法需要用到联合概率高斯混合模型python实现 高斯混合模型例子_高斯混合模型python实现_30和后验高斯混合模型python实现 高斯混合模型例子_高斯混合模型python实现_31,所有我们首先写出这两个概率的表示:

高斯混合模型python实现 高斯混合模型例子_机器学习_32

  1. E step

高斯混合模型python实现 高斯混合模型例子_算法_33

对于上式展开的每一项,我们可以进行化简:

高斯混合模型python实现 高斯混合模型例子_高斯混合模型python实现_34

继续对高斯混合模型python实现 高斯混合模型例子_数据挖掘_35进行化简可以得到:

高斯混合模型python实现 高斯混合模型例子_数据挖掘_36

  1. M step

EM算法的迭代公式为:

高斯混合模型python实现 高斯混合模型例子_机器学习_37

下面以求解高斯混合模型python实现 高斯混合模型例子_高斯混合模型python实现_38为例,来看如何进行迭代求解,以下是求解的迭代公式:

高斯混合模型python实现 高斯混合模型例子_数据挖掘_39

于是可以转化为以下约束优化问题:

高斯混合模型python实现 高斯混合模型例子_高斯混合模型python实现_40

然后使用拉格朗日乘子法进行求解:

高斯混合模型python实现 高斯混合模型例子_机器学习_41

这里以求解高斯混合模型python实现 高斯混合模型例子_算法_42为例展示了M step的求解过程,其他参数也按照极大化Q函数的思路就可以求解,求得一轮参数后要继续迭代求解直至收敛。