机器学习(四)高斯混合模型

高斯混合模型聚类算法

原文地址http://blog.csdn.net/hjimce/article/details/45244603 

作者:hjimce

高斯混合算法是EM算法的一个典型的应用,EM算法的推导过程这里不打算详解,直接讲GMM算法的实现。之前做图像分割grab cut 算法的时候,只知道把opencv中的高斯混合模型代码复制下来,然后封装成类使用,学的比较浅。结果没过几天发现高斯混合算法又忘了差不多了,于是用matlab去亲自写过一遍,终于发现了高斯混合模型的奥义。我的理解是高斯混合模型其实是进化版的k均值算法,因此学习高斯混合模型,最好还是把k均值算法写过一遍。高斯混合与k均值的本质区别在于权值问题,k均值采用的是均匀权值,而高斯混合的权值需要根据高斯模型的概率进行确定。

    开始学习高斯混合模型,需要先简单复习一下单高斯模型的参数估计方法,描述一个高斯模型其实就是要计算它的均值、协方差矩阵(一维空间为方差,二维以上称之为协方差矩阵):

假设有数据集X={x1,x2,x3……,xn},那么用这些数据来估计单高斯模型参数的计算公式为

OK,开始写代码前,先用matlab生成数据集,然后在进行聚类:

利用matlab的生成高斯模型数据集X:



然后利用上面的估计方法计算均值,和协方差是否满足均值为[2 3],协方差为[1 0; 0 2];测试代码如下,r2、covmat即为计算结果



先把单高斯模型的函数写好,因为高斯混合模型是它的进化版,计算高斯混合模型过程中需要调用单高斯模型参数估计,写好代码后面才不会乱掉。开始高斯混合建模之前,我先用matlab生成一个测试数据集data,如下图,然后再进行算法测试。

生成数据集代码如下:





ok,数据生成完毕,接着我们正式开始高斯混合算法解析,先看一下高斯混合模型的建模求参步骤:

高斯混合模型的求解,说得简单一点就是要求解高斯模型中的均值与协方差,现在我们要把上述的数据分成3类,那么我们就是要求解3个均值及其对应的3个协方差矩阵。先讲一下总体步骤,高斯混合模型包含3个步骤:

a.初始化各个高斯模型的参数,及每个高斯模型的权重;

b.根据各个高斯模型的参数及其权重,计算每个点属于各个高斯模型的权重,计算公式为:


其中:,Wj是每个高斯模型在这个模型所占用得权重。这个公式说的简单一点就是每个高斯模型的权重与其概率的乘积,这样计算出来就相当于每个高斯模型在每个数据点中的所占用的比例。

c.更新各个高斯模型的均值与方差,计算公式如下:



d.更新各个高斯模型的总权重,计算公式如下:

   

其实第c、d两个步骤,无所谓顺序,你完全可以总权重更新放在各个模型参数更新之前。迭代过程就是b、c、d三个步骤进行更新就可以了。OK,接着结合上面的公式写一写代码。

(1)初始化高斯模型参数。

这一步初始化,在实际应用中一般是先通过k均值算法进行初始聚类,然后根据聚类结果进行计算初始化参数。不过这里我为了测试,我们选择随机初始化,这样才能看出GMM算法到底能不能实现聚类。

我这里各个高斯模型初始均值(中心)的初始化方法选择跟k均值的初始化方法一样,也就是随机选择k个点位置作为k个高斯模型的初始均值。然后协方差矩阵的初始化,我选择单位矩阵,具体代码如下:




(2)计算各个模型在各个点的权重值

这一步是计算每个数据点属于各个高斯混合的概率,说白了就是计算权值:



(3)步骤c 更新参数


(4)步骤d 更新各个模型的总权重

 

然后把步骤2、3、4的代码放在循环语句中进行迭代就ok了。最后贴一下整份代码:

1、脚本文件:


2、相关函数


看以下最后的测试结果:


*******************作者:hjimce     联系qq:1393852684 更多资源请关注我的博客:http://blog.csdn.net/hjimce                  原创文章,转载请注明出处 *******************

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值