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

《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,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降维的原理和操作过程,请看接下来的推送。

原文发布于微信公众号 - 算法channel(alg-channel)

原文发表时间:2017-12-04

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专知

【干货】Batch Normalization: 如何更快地训练深度神经网络

【导读】本文是谷歌机器学习工程师 Chris Rawles 撰写的一篇技术博文,探讨了如何在 TensorFlow 和 tf.keras 上利用 Batch N...

4.5K8
来自专栏MelonTeam专栏

机器学习入门系列05,classification: probabilistic generative model(分类:概率生成模型)

引用课程:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ml16.html 先看这里,可能由于你正在查看这个平台行...

3595
来自专栏梦里茶室

TensorFlow 深度学习笔记 从线性分类器到深度神经网络

Limit of Linear Model 实际要调整的参数很多 ? 如果有N个Class,K个Label,需要调整的参数就有(N+1)K个 Linear...

2939
来自专栏AI研习社

CS231n 课后作业第二讲 : Assignment 2(含代码实现)| 分享总结

CS231n 是斯坦福大学开设的计算机视觉与深度学习的入门课程,授课内容在国内外颇受好评。其配套的课后作业质量也颇高,因此雷锋网 AI 研习社在近期的线上公开...

49110
来自专栏机器之心

教程 | 仅需六步,从零实现机器学习算法!

从头开始写机器学习算法能够获得很多经验。当你最终完成时,你会惊喜万分,而且你明白这背后究竟发生了什么。

1162
来自专栏AI2ML人工智能to机器学习

矩有四子

在讨论一些方法的几何意义之前需要理解一下线性代数的一个基础知识,就是矩阵和它代表的空间的含义。

1093
来自专栏程序生活

机器学习(十三)缺失值处理的处理方法总结

1822
来自专栏机器学习算法工程师

你知道词袋模型吗?

词袋模型是一种在使用机器学习算法建模文本时表示文本数据的方式; 易于理解和实现,并且在语言建模和文档分类等问题上取得了巨大成功。

1343
来自专栏量化投资与机器学习

【Python机器学习】系列之从线性回归到逻辑回归篇(深度详细附源码)

第1章 机器学习基础 将机器学习定义成一种通过学习经验改善工作效果的程序研究与设计过程。其他章节都以这个定义为基础,后面每一章里介绍的机器学习模型都是按照这个...

57610
来自专栏用户3246163的专栏

2.1 统计基础

主要用在线性回归的时候来估计b1 unbiasedness: 估计的残差是随机的 efficiency:对比其他估计样本残差最小 consistency:样本增...

2593

扫码关注云+社区

领取腾讯云代金券