前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高斯混合模型:不掉包实现多维数据聚类分析

高斯混合模型:不掉包实现多维数据聚类分析

作者头像
double
发布2018-04-02 15:57:22
1.2K0
发布2018-04-02 15:57:22
举报
文章被收录于专栏:算法channel

《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来!

01

回顾

昨天实现推送了,GMM高斯混合的EM算法实现的完整代码,这是不掉包的实现,并且将结果和sklearn中的掉包实现做了比较:聚类结果基本一致,要想了解这个算法实现代码的小伙伴,可以参考:

机器学习高斯混合模型:聚类原理分析(前篇)

机器学习高斯混合模型(中篇):聚类求解

机器学习高斯混合模型(后篇):GMM求解完整代码实现

机器学习储备(13):概率密度和高斯分布例子解析

以上包括了高斯混合模型的原理,公式推导过程,完整的代码实现,以及高斯概率密度公式的例子解析。

02

二维高斯分布聚类数据生成

在此不再将完整的代码黏贴上,有需要的请参考上个推送或者在微信或QQ群中和我要Jupyter NoteBook的实现代码。

下面仍然借助sklearn的高斯分布的数据簇生成功能,注意参数n_features的含义是生成2维(2个特征)的数据集。

x,label = make_blobs(n_samples=500,n_features=2, centers=3,

cluster_std=[0.6,1.2,1.8],

random_state=1)

sklearn生成的满足二维高斯分布的3簇数据如下所示:

这是生成3簇二维的高斯分布数据,下面借助自己实现的GMM聚类接口直接对以上模型进行聚类(详细代码请参考之前的推送,文章开头)。

03

二维数据的聚类分析

下面是调用自己写的GMM聚类接口的代码,最终聚类的结果为:3类,可以看出聚类结果较好。

#一维特征的GMM聚类模拟

px,aves,sigmas =GMM(x,3)

mylabel = classifior(px)

#可以看到不掉包的实现与sklearn的模拟结果是基本一致的

plt.scatter(x[:, 0],x[:,1],marker='o', c=mylabel)

因为GMM聚类会返回每个样本点属于每个簇的概率密度,因此500个样本点,会有一个500 by 3的概率密度结果矩阵,即代码中的 px,下面列出px的部分数据,选取最大值对应的簇即为样本的聚类归属。

array([[ 2.82354561e-01, 9.62092908e-09, 1.55829697e-10],

[ 1.21224887e-35, 7.71577880e-02, 8.29431337e-06],

[ 9.79082071e-37, 1.06570065e-01, 3.55996295e-05],

...,

[ 1.29709523e-33, 9.55957280e-02, 2.51601671e-05],

[ 8.36655897e-02, 1.17357149e-10, 4.61517416e-12],

[ 4.68328153e-87, 3.51016335e-13, 1.18809399e-02]])

看下预测的3个簇的平均值:

array([[ 3.2710034 , -4.3257953 ],

[-0.90882595, 2.05269608],

[ 1.64356224, 8.96388503]])

重点看下每个簇的协方差,这个是多维高斯分布的一个重要区别于一维的高斯分布之处,它是一个D by D (D表示数据的维数(特征数))的方阵,而不再是一个标量,

#簇0的协方差矩阵

sigmas[:,:,0]

array([[ 0.27663524, 0.02760814],

[ 0.02760814, 0.40283533]])

#簇1的协方差矩阵

sigmas[:,:,1]

array([[ 1.62581999, -0.16528428],

[-0.16528428, 1.29252665]])

#簇2的协方差矩阵

sigmas[:,:,2]

array([[ 2.74381182, 0.02889155],

[ 0.02889155, 4.21288365]])

注意:

1.多维高斯分布的协方差矩阵是对称矩阵

2.主对角线上的元素为方差

3. 非主对角线上的元素为两两特征间的相关系数

04

总结和展望

至此,高斯混合模型从原理,到公式推导,再到编写完整代码借助EM算法求解,都完整的走了一遍,可以看到GMM模型的聚类特点,能给出样本点属于每个簇的概率,取概率最大的簇为所属簇。

在最近几天的推送中,我们先后模拟了一维和两维的高斯分布的数据样本,实际上,我们已经实现的算法可以模拟更多维度的数据,因为假定了是D维,但是当维度很高时,我们往往不容易分析,计算效率慢,同时也容易发生奇异问题,尤其有几个维度具有强相关性时,那么应该怎么办呢?

因此,当我们面对一堆样本由100维组成的数据时,学会如何提取出主要的特征,是非常重要的。本节描述的协方差矩阵将会大展身手,常用的算法是PCA降维,这通常是数据预处理的常用降维手法,通过降维,一来方便画图展示,二来也是去掉次要矛盾解决主要矛盾的过程。

预知PCA降维的原理和操作过程,请看接下来的推送。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档