深入机器学习系列12-高斯混合模型

高斯混合模型

  现有的高斯模型有单高斯模型()和高斯混合模型()两种。从几何上讲,单高斯分布模型在二维空间上近似于椭圆,在三维空间上近似于椭球。在很多情况下,属于同一类别的样本点并不满足“椭圆”分布的特性,所以我们需要引入混合高斯模型来解决这种情况。

1 单高斯模型

  多维变量服从高斯分布时,它的概率密度函数定义如下:

  在上述定义中,是维数为的样本向量,是模型期望,是模型协方差。对于单高斯模型,可以明确训练样本是否属于该高斯模型,所以我们经常将用训练样本的均值代替,将用训练样本的协方差代替。假设训练样本属于类别,那么上面的定义可以修改为下面的形式:

  这个公式表示样本属于类别的概率。我们可以根据定义的概率阈值来判断样本是否属于某个类别。

2 高斯混合模型

  高斯混合模型,顾名思义,就是数据可以看作是从多个高斯分布中生成出来的。从中心极限定理可以看出,高斯分布这个假设其实是比较合理的。为什么我们要假设数据是由若干个高斯分布组合而成的,而不假设是其他分布呢?实际上不管是什么分布,只取得足够大,这个就会变得足够复杂,就可以用来逼近任意连续的概率密度分布。只是因为高斯函数具有良好的计算性能,所被广泛地应用。

  每个由个高斯分布组成,每个高斯分布称为一个组件(),这些组件线性加成在一起就组成了的概率密度函数:

  根据上面的式子,如果我们要从分布中随机地取一个点,需要两步:

随机地在这个组件之中选一个,每个组件被选中的概率实际上就是它的系数;

选中了组件之后,再单独地考虑从这个组件的分布中选取一个点。

  怎样用来做聚类呢?其实很简单,现在我们有了数据,假定它们是由生成出来的,那么我们只要根据数据推出的概率分布来就可以了,然后的个组件实际上就对应了个聚类了。在已知概率密度函数的情况下,要估计其中的参数的过程被称作“参数估计”。

  我们可以利用最大似然估计来确定这些参数,的似然函数如下:

  可以用算法来求解这些参数。算法求解的过程如下:

E-步。求数据点由各个组件生成的概率(并不是每个组件被选中的概率)。对于每个数据$x_$来说,它由第个组件生成的概率为公式:

  在上面的概率公式中,我们假定和均是已知的,它们的值来自于初始化值或者上一次迭代。

M-步。估计每个组件的参数。由于每个组件都是一个标准的高斯分布,可以很容易分布求出最大似然所对应的参数值,分别如下公式:

3 源码分析

(代码块部分可以左右滑动查看哦)

3.1 实例

  在分析源码前,我们还是先看看高斯混合模型如何使用。

由上面的代码我们可以知道,使用高斯混合模型聚类使用到了类中的方法。下面我们直接进入方法,分析它的实现。

3.2 高斯混合模型的实现

3.2.1 初始化

  在方法中,程序所做的第一步就是初始化权重(上文中介绍的)及其相对应的高斯分布。

在上面的代码中,当为空时,用所有值均为的数组初始化权重,用值为对象的数组初始化所有的高斯分布(即上文中提到的组件)。每一个对象都由从数据集中抽样的子集计算而来。这里用样本数据的均值和方差初始化的和。

3.2.2 EM算法求参数

  初始化后,就可以使用算法迭代求似然函数中的参数。迭代结束的条件是迭代次数达到了我们设置的次数或者两次迭代计算的对数似然值之差小于阈值。

在迭代内部,就可以按照和来更新参数了。

E-步:更新参数

我们先要了解以及方法的实现。

ExpectationSum是一个聚合类,它表示部分期望结果:主要包含对数似然值,权重值(第二章中介绍的),均值,方差。方法的实现如下:

从上面的实现我们可以看出,最终,表示公式(2)中的对数似然。和分别表示公式(3)中的和,表示公式(6)中的求和部分,表示公式(7)中的求和部分。

  调用的方法,我们可以基于所有给定数据计算上面的值。利用计算的这些新值,我们可以在中更新和。

M-步:更新参数和

基于E-步计算出来的值,根据公式**(6),我们可以通过来更新;根据公式(7),我们可以通过来更新;同时,根据公式(5),我们可以通过来计算。

  迭代执行以上的E-步M-步,到达一定的迭代数或者对数似然值变化较小后,我们停止迭代。这时就可以获得聚类后的参数了。

3.3 多元高斯模型中相关方法介绍

  在上面的求参代码中,我们用到了以及中的部分方法,如。定义如下:

MultivariateGaussian包含一个向量和一个矩阵,分别表示期望和协方差。最重要的方法是,顾名思义就是计算给定数据的概率密度函数。它的实现如下:

上面的和通过方法计算。这个概率密度函数的计算需要计算的行列式以及逆。

这里,和是奇异值分解得到的子矩阵。具体的实现代码如下:

上面的代码中,用于分解矩阵。

4 参考文献

【1】漫谈 Clustering (3): Gaussian Mixture Model

本文来自企鹅号 - 智子AI媒体

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏智能算法

SVM 的“核”武器

一、上一次我们讲到关于SVM通过拉格朗日乘子法去求解的部分,引入乘子 得到下面的式子: ? 我们令 ? 当所有的约束条件满足时,我们得到的 ? ,而之前的优...

3376
来自专栏机器学习原理

机器学习(3)——回归模型目标函数多项式扩展正则项机器学习调参

前言:紧接上一篇文章结尾,预测值和真实值存在较大差距,接着介绍用多项式权重来提高拟合度(R2),过拟合解决办法,引出正则项L1和L2,Ridge回归和LASSO...

3635
来自专栏红色石头的机器学习之路

台湾大学林轩田机器学习技法课程学习笔记14 -- Radial Basis Function Network

上节课我们主要介绍了Deep Learning的概念。Deep Learing其实是Neural Networ的延伸,神经元更多,网络结构更加复杂。深度学习网络...

2360
来自专栏CVer

深度学习的卷积算法指南[1] 卷积和池化简介

本文简要回顾了卷积神经网络(CNN)的主要组成部分,即离散卷积(discrete convolutions)和池化(pooling)。

4095
来自专栏杨熹的专栏

详解 LSTM

今天的内容有: LSTM 思路 LSTM 的前向计算 LSTM 的反向传播 关于调参 ---- LSTM 长短时记忆网络(Long Short Term Mem...

4735
来自专栏专知

理解多层CNN中转置卷积的反向传播(附代码)

1.4K3
来自专栏机器学习、深度学习

人脸检测-- Face R-FCN + Face R-CNN

Detecting Faces Using Region-based Fully Convolutional Networks 本文使用 R-FCN 来进行人脸...

4826
来自专栏Ldpe2G的个人博客

Mxnet 实现图片快速风格化

1903
来自专栏人工智能LeadAI

计算机视觉处理三大任务:分类、定位和检测

该笔记是以斯坦福cs231n课程(深度学习计算机视觉课程)的python编程任务为主线,展开对该课程主要内容的理解和部分数学推导。这篇学习笔记是关于计算机视觉处...

6047
来自专栏深度学习那些事儿

利用pytorch实现神经网络风格迁移Neural Transfer

载入图像输入大小无要求,最终会被剪裁到相同大小,这是因为神经网络设计了一个特定的输入大小,因此内容图像和风格图像必须大小一致。

3317

扫码关注云+社区

领取腾讯云代金券