混合高斯模型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来做分类。

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

    运行结果是:

    ('first 10 samples:', 
    array([[-1.67944936],
    [ 0.64083316],
    [ 0.21439992],
    [-0.45738897],
    [ 0.01882893],
    [ 0.71916592],
    [ 1.53913442],
    [-0.07888893],
    [ 0.19748583],
    [-0.69922825]]))
    [1, 1, 0, 0]
    

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

    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 则给出的是被分类到不同数据集类别中的概率(又被称为软分类softassignment )。