EM算法及高斯混合模型(含Mathematica实现代码)

模式识别课程中已经学习了EM算法和高斯混合模型,但是听课的时候感觉十分茫然,课程中乃至的概率论等内容和数学中的内容有些脱节,直接套用数学中的内容甚至会导致前后矛盾。课后反复研究之后,发现是不正规的甚至是错误的数学语言的使用导致的公式晦涩难懂。因此在此做一些笔记,努力让公式简单一些。

高斯混合模型

从一个例子说起。

一片树林中有A、B、C三种树木,每种树木的叶子的面积与最大宽度分别服从联合高斯分布(具体参数未知)。如何通过收集一定量的树叶(不知道这些树叶属于哪种树木),试对这些树叶进行分类,并估算出三种树木的联合高斯分布的参数。

首先要对这个例子进行数学描述。每个叶子可以用一个二维向量表示: x=(x1,x2) ,其中的 x1,x2 分别为树叶的面积和最大宽度。叶子属于哪种树用三维向量表示: z=(z1,z2,z3) ,其中, z1,z2,z3 中有且仅有一个为1,其余两个为0. z1 为1表示该树叶属于树木A, z2,z3 与此含义相同。总共采集了 m=100 片叶子,则第 i 片叶子记为 xi ,类别为 zi ,对于 zi z(i) 表示 zi 中第几个分量为1,比如,若 z5=(0,1,0) ,则 z(5)=2 。树A、B、C的树叶的分布分别为 N(μi,Σi),i=1,2,3 ,注意,其中的 μi 是一个二维向量, Σi 是一 2×2 的矩阵。

例如,以下Mathematica代码实现了500个示例数据的生成(三种树木的概率分别为0.2,0.3,0.5):

generateDataCode

图1 Mathematica代码,用于生成高斯混合模型的示例数据。

效果如图2所示:

generateData

图2 高斯混合模型示例数据

在了解了实际例子后,展示一下“官方”的高斯混合模型的定义,并指明其含混和错误的地方。

Suppose that we are given a training set { x(1),,x(m)} as usual. Since we are in the unsupervised learning setting, these points do net come with any labels.

We wish to model the data by specifying a joint distribution p(x(i),z(i))=p(x(i)|z(i))p(z(i)) . Here, z(i)Multinomial(ϕ) , (where ϕj0,kj=1ϕj=1 , and parameter ϕj gives p(z(i)=j) ,) and x(i)|z(i)N(μj,Σj) . We let k denote the number of values that the z(i) ’s can take on. Thus our model posits that each x(i) was generated by randomly choosing z(i) from { 1,,k} , and then x(i) was drawn from one of k Gaussians depending on z(i) . This is called the mixture of Gaussians model.

大体一看会有很多难以理解的地方,这里做一下说明。首先,训练集用的是小写字体加目标的形式,不符合常理。且不加粗会误认为是标题,因此改用上文的方式,训练集记为: { x1,,xm} ,第 k 个训练数据的各个分量记为 (xk1,xk2,,xkc) (这里的 c 表示训练数据的维数,后面并没有用到)。

“官方文档”中的 z(i) zi 是混用的。本身这两个变量是可以一一对应的,但是一个是标量一个是向量,太容易让人迷惑了,而且很多地方严格的来说是错误的。文中提到了一个多项式分布(Multinomial Distribution),这是一个怎样的分布呢?这是一个二项式分布的推广分布,对于一个实验,有 k 各可能的结果,各个结果发生的可能分别为 p1,,pk ,进行了 n 次独立实验之后,这 k 个结果分别发生了 a1,,ak 次的概率为:

p(a1,,ak;n,p1,,pk)=(na1,,ak)pa11pakk,0,i=1kai=notherwise

式中, (na1,,ak)=n!
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值