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

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

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值