高斯混合模型聚类_使用python+sklearn实现高斯混合椭球体模型

本示例绘制通过期望最大化(Expectation Maximisation)(GaussianMixture类)和变分推断(Variational Inference)(狄利克雷(Dirichlet)过程的BayesianGaussianMixture类模型)获得的两个高斯混合的置信椭圆体(confidence ellipsoids)。

两种模型都可以使用五个分量(components)来拟合数据,但“期望最大化”模型必然会使用所有的五个分量,而“变分推论”模型仅会有效地使用满足拟合所需要的分量数量。在这里我们可以看到,期望最大化模型会任意拆分一些分量,因为它尝试对很多分量进行拟合,而狄利克雷(Dirichlet)过程模型会自动调整其状态数。

本示例没有把这一点显示出来,因为我们处于低维空间中,但是狄利克雷(Dirichlet)过程模型的另一个优点是,即使在每个聚类中,样本数据的数量少于数据的维数,它也可以有效地拟合出完整的协方差矩阵,这是由于推断(inference)算法的正则化属性。f497bca885b7e95d75310b589e17cec7.png

import itertools

import numpy as np
from scipy import linalg
import matplotlib.pyplot as plt
import matplotlib as mpl

from sklearn import mixture

color_iter = itertools.cycle(['navy', 'c', 'cornflowerblue', 'gold',
                              'darkorange'])


def plot_results(X, Y_, means, covariances, index, title):
    splot = plt.subplot(2, 1, 1 + index)
    for i, (mean, covar, color) in enumerate(zip(
            means, covariances, color_iter)):
        v, w = linalg.eigh(covar)
        v = 2. * np.sqrt(2.) * np.sqrt(v)
        u = w[0] / linalg.norm(w[0])
        # DP不会使用每一个它可以访问的分量,除非它必需要使用。
        # 我们不应该绘制冗余的分量。
        if not np.any(Y_ == i):
            continue
        plt.scatter(X[Y_ == i, 0], X[Y_ == i, 1], .8, color=color)

        # 绘制椭圆以显示高斯分量
        angle = np.arctan(u[1] / u[0])
        angle = 180. * angle / np.pi  # 转换为度数
        ell = mpl.patches.Ellipse(mean, v[0], v[1], 180. + angle, color=color)
        ell.set_clip_box(splot.bbox)
        ell.set_alpha(0.5)
        splot.add_artist(ell)

    plt.xlim(-9., 5.)
    plt.ylim(-3., 6.)
    plt.xticks(())
    plt.yticks(())
    plt.title(title)


# 每个分量的样本数量
n_samples = 500

# 生成包括两个分量的随机样本
np.random.seed(0)
C = np.array([[0., -0.1], [1.7, .4]])
X = np.r_[np.dot(np.random.randn(n_samples, 2), C),
          .7 * np.random.randn(n_samples, 2) + np.array([-6, 3])]

# 使用五个分量拟合用期望最大化(EM)算法的高斯混合模型
gmm = mixture.GaussianMixture(n_components=5, covariance_type='full').fit(X)
plot_results(X, gmm.predict(X), gmm.means_, gmm.covariances_, 0,
             'Gaussian Mixture')

# 使用五个分量拟合用狄利克雷(Dirichlet)过程的高斯混合模型
dpgmm = mixture.BayesianGaussianMixture(n_components=5,
                                        covariance_type='full').fit(X)
plot_results(X, dpgmm.predict(X), dpgmm.means_, dpgmm.covariances_, 1,
             'Bayesian Gaussian Mixture with a Dirichlet process prior')

plt.show()

脚本的总运行时间:(0分钟0.496秒)

估计的内存使用量: 8 MB

9d43f1dddcf59275cfd91fa1ea5e88aa.png下载Python源代码:plot_gmm.py

下载Jupyter notebook源代码:plot_gmm.ipynb

由Sphinx-Gallery生成的画廊

dc5fc918aaf44d6a266a42d7c249bd86.png ☆☆☆为方便大家查阅,小编已将scikit-learn学习路线专栏文章统一整理到公众号底部菜单栏,同步更新中,关注公众号,点击左下方“系列文章”,如图:

aa4012fe2e51f52be75d5ff2c8c758ae.png

欢迎大家和我一起沿着scikit-learn文档这条路线,一起巩固机器学习算法基础。(添加微信:mthler,备注:sklearn学习,一起进【sklearn机器学习进步群】开启打怪升级的学习之旅。)

3da81ae54653806f863e2b3791e2e656.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值