混合高斯模型Gaussian Mixture Model(GMM)

混合高斯模型(Gaussian Mixture Model,简称GMM)是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。通俗点讲,无论观测数据集如何分布以及呈现何种规律,都可以通过多个单一高斯模型的混合进行拟合。

如下图是一个观测数据集,数据集明显分为两个聚集核心,我们通过两个单一的高斯模型混合成一个复杂模型来拟合数据。这就是一个混合高斯模型。

QQ截图201505081402351111

既然混合高斯模型是由n个(或多个)单高斯模型组成,那么首先了解下单高斯模型(Single Mixture Model,简称SMM)。

最常见的单高斯模型(或者叫单高斯分布)就是钟形曲线,只不过钟形曲线只是一维下的高斯分布。高斯分布(Gaussian distribution)又叫正态分布(Normal distribution),是一个在数学、物理及工程等领域都非常重要的概率分布,在统计学的许多方面有着重大的影响力。因其曲线呈钟形,因此人们又经常称之为钟形曲线。如下图为标准正态分布图:

20130616181626-1670148626

它的基本定义是:若随机变量X服从一个数学期望为μ、方差为σ^2的高斯分布,则记为N(μ,σ^2)。数学期望μ指的是均值(算术平均值),σ为方标准差(方差开平方后得到标准差)。高斯分布的概率密度函数为:

342ac65c1038534384b650b09213b07eca808822

上述公式只是一维下的高斯分布模型,多维高斯分布模型下概率密度函数如下:

QQ截图2015050814432911

上述公式中,x是维度为d的列向量,u是模型期望,Σ是模型方差。在实际应用中u通常用样本均值来代替,Σ通常用样本方差来代替。很容易判断一个样x本是否属于类别C。因为每个类别都有自己的u和Σ,把x代入公式中,当概率大于一定阈值时我们就认为x属于C类。

从几何形状上讲,单高斯分布模型在二维空间应该近似于椭圆(如本文最开始的图形),在三维空间上近似于椭球。但单高斯分布模型的问题是在很多分类问题中,属于同一类别的样本点并不满足“椭圆”分布的特性。因此,就需要引入高斯混合模型来解决这个问题。

我们可以用不同的分布来随意地构造 XX Mixture Model(例如泊松混合模型等) ,但由于GMM的计算性能强、拟合程度高等因素导致其最为流行。另外,混合模型本身也可以变得非常复杂,通过增加 Model 的个数,改变权重的计算方法等,我们可以任意地逼近任何连续的概率密度分布。

那么,基于单高斯模型的混合高斯模型公式定义如下:

QQ截图2015050814570511

其中,K需要事先确定好,就像K-means中的K一样,只要K足够大,这个XX Mixture Model就会变得足够复杂,就可以用来逼近任意连续的概率密度分布。πk是权值因子。其中的任意一个高斯分布N(x;uk,Σk) 叫作这个模型的一个component(成分)。GMM是一种聚类算法,每个component就是一个聚类中心。

既然已经了解模型的定义,如何确定这些参数值?GMM通常使用最大期望( Expectation Maximum,简称EM)进行参数评估。EM算法的基本思路是:随机初始化一组参数θ(0),根据后验概率Pr(Y|X;θ)来更新Y的期望E(Y),然后用E(Y)代替Y求出新的模型参数θ(1)。如此迭代直到θ趋于稳定。

接下来使用Python的机器学习库SKlearn中的GMM算法演示实例——使用GMM来做分类。

  1. #coding:utf-8
  2. import numpy as np
  3. from sklearn import mixture
  4. #生成随机观测点,含有2个聚集核心
  5. obs = np.concatenate((np.random.randn(100, 1), 10 + np.random.randn(300, 1)))
  6. clf = mixture.GMM(n_components=2)
  7. print obs[:10]
  8. clf.fit(obs)
  9. #预测
  10. print clf.predict([[0], [2], [9], [10]])


 

运行结果是:

  1. ('first 10 samples:', array([[-1.67944936],
  2. [ 0.64083316],
  3. [ 0.21439992],
  4. [-0.45738897],
  5. [ 0.01882893],
  6. [ 0.71916592],
  7. [ 1.53913442],
  8. [-0.07888893],
  9. [ 0.19748583],
  10. [-0.69922825]]))
  11. [1, 1, 0, 0]


 

在该函数中,可配置的参数如下:

  1. class sklearn.mixture.GMM(n_components=1, covariance_type='diag', random_state=None, thresh=None, tol=0.001, min_covar=0.001, n_iter=100, n_init=1, params='wmc', init_params='wmc')


混合高斯模型的应用场景包括:

  • 数据集分类,如会员分类;
  • 图像分割以及以及特征抽取,例如在视频中跟踪人物以及区分动作,识别汽车、建筑物等
  • 语音分割以及特征特征抽取,例如从一堆杂乱的声音中提取某个人的声音,从音乐中提取背景音乐,从大自然中提取地震的声音等。

 


 

尾巴

GMM与k-means聚类相似,也使用迭代算法计算并最终收敛到局部最优。但高斯混合模型在各类尺寸不同、聚类间有相关关系的的时候可能比k-means聚类更合适;GMM 是基于概率密度函数进行学习,所以除了在聚类应用外,还经常应用于密度检测(density estimation );另外, k-means 的结果是每个观测点一定被分类到某个数据集类别中,而 GMM 则给出的是被分类到不同数据集类别中的概率(又被称为软分类soft assignment )。


====================【好书推荐,我为自己代言】====================

《Python数据分析与数据化运营》第二版上市啦!

50+数据流工作知识点
14个数据分析与挖掘主题
8个综合性运营分析案例
涵盖会员、商品、流量、内容4大主题
360°把脉运营问题并贴合数据场景落地


本书主要基于Python实现,其中主要用到的计算库是numpy、pandas和sklearn,其他相关库还包括:
  • 标准库:re、time、datetime、json、 base64、os、sys、cPickle、tarfile
  • Python调用R的rpy2
  • 统计分析:Statsmodels
  • 中文处理:结巴分词
  • 文本挖掘:Gensim
  • 数据挖掘和算法:XGboost、gplearn、TPOT
  • 爬虫和解析:requests、Beautiful Soup、xml
  • 图像处理:OpenCV和PIL/Pollow
  • 数据读取:xlrd、pymongo、pymysql
  • 数据预处理:imblearn
  • 展示美化类:Matplotlib、pyecharts、graphviz、prettytable、wordcloud、mpl_toolkits、pydotplus
如果你对以下内容感兴趣,那么本书将值得一看:
  • KMeans聚类的自动K均值的确立方法
  • 基于软方法的多分类模型组合评估模型的应用
  • 基于自动下探(下钻、细分)的应用
  • 基于增量学习的多项式贝叶斯分类
  • pipeline管道技术的应用
  • 基于超参数的自动参数值的优化方法
  • 特征自动选择
  • 文本分类、文本主题挖掘
  • 基于自动时间序列ARIMA的P、D、Q的调整
  • python决策树规则输出
  • 基于自定义图像的文本标签云
  • 非结构化数据,例如图像、音频、文本等处理
  • 对象持久化处理
  • 如何使用Python调用R实现数据挖掘
  • 自动化学习:增加了对于自动化数据挖掘与机器学习的理论、流程、知识和应用库介绍,并基于TPOT做自动化回归和分类学习案例演示
有关这本书的写作感受、详细内容介绍、附件(含数据和代)下载、关键知识和方法以及完整书稿目录,请访问《Python数据分析与数据化运营》第二版出版了!要购买此书,可以去京东当当天猫等查看。

《混合高斯模型Gaussian Mixture Model(GMM)》上有2条评论

  1. 求问:对于GMM概念的解释(混合高斯模型(Gaussian Mixture Model,简称GMM)是用高斯概率密度函数(正态分布曲线)精确地量化事物,将一个事物分解为若干的基于高斯概率密度函数(正态分布曲线)形成的模型。通俗点讲,无论观测数据集如何分布以及呈现何种规律,都可以通过多个单一高斯模型的混合进行拟合。)这段话来自哪本书或者论文?我想引用一下。谢谢!

发表评论

电子邮件地址不会被公开。 必填项已用*标注