美文网首页
高斯混合模型

高斯混合模型

作者: taon | 来源:发表于2019-11-09 09:20 被阅读0次

    高斯混合模型(Gaussian Mixture Model)
    高斯混合模型,通常简称GMM,是一种广泛使用的聚类算法,它并不能直接返回该数据点属于哪一簇。GMM使用了高斯分布作为模型参数,用模型去逼近数据点分布,在实际计算过程中使用的是期望最大算法(EM, Expection Maximum)进行训练。高斯分布,通常也叫正态分布,是自然界中最常见的分布形式。

    对于任一高斯分布函数,都有两个参数μ和σ,其中μ为该组数据的均值,σ为该组数据的标准差,下式是高斯分布的密度函数。


    probability density function.png

    下图展示了4组不同的高斯分布函数,每一组分布的μ和σ是不同的。高斯分布的变量取值范围为[-∞,+∞],所以任一高斯分布都能覆盖我们所研究的变量,但由于其值域存在很大的差别,所以并不是任一高斯分布都能很好地拟合我们的变量分布。

    gaussian mixture model.png

    如下图所示,是一堆分布在二维平面中的数据点,如我们所知,符合高斯分布的数据点在平面中呈椭圆形。对于下图中的数据点,如果我们试图用一个高斯分布去拟合图中的数据点,显然难以达到很好的效果。如图所示,两个高斯分布能够较好地表示该数据点的分布,这样有多个高斯分布组成的模型就称为高斯混合模型(GMM)。GMM的概率密度函数如下,n表示高斯分布的数量,i表示第i个高斯分布,ai表示权重项,ai的和为1,f(x)表示数据x的在GMM中的概率值。


    GMM sample.png
    GMM probability density function.png

    GMM API文档

    sklearn.mixture.GaussianMixture(n_components=1, covariance_type=’full’, tol=0.001, 
    reg_covar=1e-06, max_iter=100, n_init=1, init_params=’kmeans’, weights_init=None, 
    means_init=None, precisions_init=None, random_state=None, warm_start=False, verbose=0, verbose_interval=10)
    

    主要参数说明:
    n_componemts:高斯分布的数量,默认值为1。
    tol:收敛阈值,默认值为0.001,当参数的更新幅度小于0.001时,计算结束。
    max_iter:最大迭代次数,默认值为100。

    GMM聚类样例演示:

    import numpy as np
    import pandas as pd
    from sklearn import datasets
    from sklearn.model_selection import train_test_split
    from sklearn.mixture import GaussianMixture
    
    iris = datasets.load_iris()
    feature = iris.data
    X_train,X_test = train_test_split(feature,test_size = 0.3,random_state = 0)
    
    gmm = GaussianMixture(n_components = 4)
    gmm.fit(X_train)
    
    #查看gmm算法的属性值
    gmm.weights_ #查看每一个高斯模型的权重
    array([0.20759727, 0.32380952, 0.27900224, 0.18959097])
    
    gmm.means_ #查看每个模型的均值
    array([[6.2917223 , 2.83008261, 4.78898083, 1.60903809],
           [4.99411765, 3.38235294, 1.45294118, 0.23235294],
           [6.89262119, 3.09046877, 5.8014212 , 2.1089126 ],
           [5.52235889, 2.63598359, 3.93112818, 1.21291487]])
    
    prediction = gmm.predict(X_test)
    print(prediction)
    array([2, 3, 1, 2, 1, 2, 1, 0, 0, 3, 2, 0, 3, 0, 0, 1, 0, 3, 1, 1, 0, 3,
           1, 1, 0, 1, 1, 0, 3, 1, 2, 3, 1, 0, 2, 3, 1, 0, 3, 3, 2, 1, 2, 1,
           1], dtype=int64)
    

    GMM算法总结:
    1.GMM是聚类算法中的一种,它的模型参数为高斯分布f(x,μ,σ),通过模型去拟合数据的分布,以求得最佳参数。
    2.GMM与Kmeans的区别,Kmeans是基于距离的聚类,主要应用于线性可分的数据点,对于形状复杂的数据点,聚类效果较差。GMM是基于高斯分布的模型,对于符合高斯分布的数据有着姣好的聚类效果。
    3.GMM与DBSCAN的区别,对于一些不规则数据或者形状复杂的数据,DBSCAN的聚类效果更好。
    4.在做机器学习任务时,我们也无法预先知道数据的分布形态,只能通过多次调整聚类算法的参数,比较其结果,并对比不同算法的聚类效果,选择姣好的。

    参考资料 :

    1. 一文详解高斯混合模型原理,陈文运|达观数据CEO,https://www.ituring.com.cn/article/497545
    2. 数据挖掘理论与算法,袁博|清华大学深圳研究生院博士生导师,
      https://next.xuetangx.com/learn/THU08091000385/THU08091000385/1075998/video/714839

    欢迎大家在阅读的过程中,提出自己的意见或者建议,我会对不足之处做进一步改进,谢谢。

    相关文章

      网友评论

          本文标题:高斯混合模型

          本文链接:https://www.haomeiwen.com/subject/qenibctx.html