05 EM算法 - 高斯混合模型 - GMM-阿里云开发者社区

开发者社区> Java技术进阶> 正文
登录阅读全文

05 EM算法 - 高斯混合模型 - GMM

简介:

04 EM算法 - EM算法收敛证明

__GMM__(Gaussian Mixture Model, 高斯混合模型)是指该算法由多个高斯模型线性叠加混合而成。每个高斯模型称之为component。

多个带有权重的高斯模型线性的叠加

__GMM算法__描述的是数据的本身存在的一种分布,即样本特征属性的分布,和预测值Y无关。显然GMM算法是无监督的算法,常用于聚类应用中,component的个数就可以认为是类别的数量。


回到昨天说的例子:随机选择1000名用户,测量用户的身高;若样本中存在男性和女性,身高分别服从高斯分布N(μ1,σ1)和N(μ2,σ2)的分布,试估计参数:μ1,σ1,μ2,σ2;

1、如果明确的知道样本的情况(即男性和女性数据是分开的),那么我们使用极大似然估计来估计这个参数值。

2、如果样本是混合而成的,不能明确的区分开,那么就没法直接使用极大似然估计来进行参数的估计。

我们可以认为当前的1000条数据组成的集X,是由两个高斯分布叠加而成的(男性的分布和女性的分布)。

男性和女性的高斯分布的叠加

在每个分布前乘以一个权重À

如果能找到一种办法把每一个高斯分布对应的参数π、 μ、σ求出来,那么对应的模型就求解出来了。

如果模型求解出来后,如何对数据进行聚类?

这个公式求出来的分别是男性和女性身高分布的概率密度,如果把π、 μ、σ都求出来,以后我们可以构建出一个__能够根据样本特征__计算出样本属于男性或女性的可能性。

实际做样本分类的时候,我们把样本X的特征x1~xn分别代入两个公式中,求出来的两个结果分别是:样本X的性别是男、是女的可能性。如果是男的可能性大于是女的可能性,我们就把样本X归入男性的分类。


假定__GMM__由k个Gaussian分布线性叠加而成,那么概率密度函数如下:

概率密度函数

分析第1个等式:
p(x): 概率密度函数,k个Gaussian分布线性叠加而成的概率密度函数。
∑p(k)p(x|k): k个某种模型叠加的概率密度函数。
p(k): 每个模型占的权重,即上面提到的π。
p(x|k): 给定类别k后,对应的x的概率密度函数。

__分析第2个等式:__目标 - 将公式写成高斯分布的样子。
__πk:__即p(k)
__p(x;μk,∑k):__多元高斯(正态)分布。有了观测数据x后,在__给定了条件__下的高斯分布。这个__条件__是__1、第k个分类的均值μk__; __2、第k个分类的方差∑k__;

深入分析p(x;μk,∑k)的参数:
如果样本有n个特征,所有的特征x1~xn一起服从一个多元的高斯分布(正态分布),所有特征的均值应该是一个向量 (μ1n);
μk 第k个分类的情况下(第k个高斯分布的情况下对应的每一列的均值);μk = (μk1kn)

k 协方差矩阵(对称阵)。现在有n个特征,协方差矩阵是一个n×n的矩阵。现在我们要算的是:

cov(x1,x1),cov(x1,x2),...,cov(x1,xn)

cov(x2,x1),cov(x2,x2),...,cov(x2,xn)
....
cov(xn,x1),cov(x1,x2),...,cov(xn,xn)

其中,__对角线__ cov(x1,x1)、cov(x2,x2), ... ,cov(xn,xn)中,x1和x1的协方差 = x1的方差;即cov(x1,x1) = var(x1);所以__对角线上两个特征的协方差 = 对应的特征的方差。__

协方差 - 知识补充

__协方差__(Covariance)在概率论统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。

协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。

总结 - 公式


理解了公式后,再来看看公式在图像上是如何体现的:

蓝1 + 蓝2 = 红

如果样本X只有一个特征x1,在二维的坐标系上的表示出来。特征x1是由n个单变量样本的高斯分布叠加而成的。向量x1k = ∑k (x1(1),x1(2),~,x1(n)),如k=(男、女),累加男性分类下的特征高斯分布和女性分类下的高斯分布;

图中__红色曲线__表示原有数据的分布情况,我认为这个原有数据是由多个比较的高斯分布叠加而成的,__蓝色曲线__ 表示单个单个高斯分布的分布情况。向量x1 = (x1(1),x1(2),~,x1(n));

PS: 蓝1+蓝2=红 体现的就是公式 p(x) = ∑πp(x;μ,∑k);


在得知数据的特征 x=(x1~xn) 后,如果我们想把数据合理得聚类到一个分类中,我们该如何去计算呢?

既然我已经得到了k个高斯分布对应的概率密度函数(现在设k=3,共3个分类),将当前特征的x=(x1~xn)代入我们的概率密度函数: p(x) = ∑πp(x;μ,∑k);

p(蓝1)+p(蓝2)+p(蓝3) = 红

我们分别计算p(蓝1)、p(蓝2)、p(蓝3),蓝色三条线各对应k分类中的一个,哪个数大,我认为当前的样本该分到哪一类。


GMM算法的两个前提:
1、数据服从高斯分布;
2、我们人为定义了分类个数k。

基于这两个前提,问题递进:

问:我们人为假定了高斯分布的分类个数k,就类似于我们聚簇时分的聚簇中心个数一样。参数π、μ、σ该如何求出来?

答:和K-Means算法一样,我们可以用__EM算法__来求解这个问题。 GMM也满足EM算法的聚类思想,首先人为得定义了聚类的个数k,从数据特征X中发掘潜在关系的一种模型。而且我还默认数据是服从多个高斯分布的。

GMM算法中的隐含条件是:第k个模型占的权重 - $color{red}{π}$、 第k个高斯分布的情况下对应的每一列的均值 - $color{red}{μ}$、协方差矩阵 cov(xi,xj) - $color{red}{∑k}$;因为本质上我们是知道数据原有的分类状况的,只是无法观测到隐含在数据中的这些特性,使用EM的思想可以迭代得求解出这些隐含变量。

对联合概率密度函数求对数似然函数:

对联合概率密度函数求对数后,原本__连乘__的最大似然估计变成了__连加__的函数状态。

EM算法求解 - E步:

E步 - 公式

套用公式后,我们可以假定隐含变量z的分布:Q(z(i) = j);
我们认为分布wj(i) = 第i个观测值对应的隐含分类第z(i)类; = 以(看不见的参数π、μ、∑)为参数的情况下,输入第i观测值的特征x后得到的分类z(i)类;

EM算法求解 - M步:
M步第1行就是上一章通过化简找到__下界__的那个函数:

M步 - 第1行就是通过化简找到下界的那个函数

M步 - 第1行就是昨天我们推导这些公式

M步 - 公式

一维正态分布 - 知识补充,背出来

多维正态分布 - 对比一维单变量时的正态分布公式,有多少个特征n就等于多少。k是指属于第几类高斯分布。


如果要分别求解三个未知变量, 则需要对每一个未知变量求偏导。

在公式中需要求的未知量有三个

1、对均值求偏导:

求解第l个分类下均值的向量

对均值求偏导

2、对方差求偏导:

对方差求偏导

3、对概率使用拉格朗日乘子法求解:

对概率使用拉格朗日乘子法求解


$color{red}{本章最重要的是记住下面的内容:}$

记住这三个公式

一维正态分布 - 知识补充,背出来

多维正态分布 - 对比一维单变量时的正态分布公式,有多少个特征n就等于多少。k是指属于第几类高斯分布。

06 EM算法 - 案例一 - EM分类初识及GMM算法实现

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
Java技术进阶
使用钉钉扫一扫加入圈子
+ 订阅

Java技术进阶成长,课程资料,案例解析,实战经验全都有!

官网链接