__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一起服从一个多元的高斯分布(正态分布),所有特征的均值应该是一个向量 (μ1~μn);
μk: 第k个分类的情况下(第k个高斯分布的情况下对应的每一列的均值);μk = (μk1~μkn)
∑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)在概率论和统计学中用于衡量两个变量的总体误差。而方差是协方差的一种特殊情况,即当两个变量是相同的情况。
协方差表示的是两个变量的总体的误差,这与只表示一个变量误差的方差不同。 如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值,另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值。 如果两个变量的变化趋势相反,即其中一个大于自身的期望值,另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。
理解了公式后,再来看看公式在图像上是如何体现的:
如果样本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),蓝色三条线各对应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步:
套用公式后,我们可以假定隐含变量z的分布:Q(z(i) = j);
我们认为分布wj(i) = 第i个观测值对应的隐含分类第z(i)类; = 以(看不见的参数π、μ、∑)为参数的情况下,输入第i观测值的特征x后得到的分类z(i)类;
EM算法求解 - M步:
M步第1行就是上一章通过化简找到__下界__的那个函数:
如果要分别求解三个未知变量, 则需要对每一个未知变量求偏导。
1、对均值求偏导:
2、对方差求偏导:
3、对概率使用拉格朗日乘子法求解:
$color{red}{本章最重要的是记住下面的内容:}$