高斯混合模型:不掉包实现多维数据聚类分析
请点击上面公众号,免费订阅。
《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来!
01
—
回顾
昨天实现推送了,GMM高斯混合的EM算法实现的完整代码,这是不掉包的实现,并且将结果和sklearn中的掉包实现做了比较:聚类结果基本一致,要想了解这个算法实现代码的小伙伴,可以参考:
以上包括了高斯混合模型的原理,公式推导过程,完整的代码实现,以及高斯概率密度公式的例子解析。
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算法求解,都完整的 45 26110 45 11868 0 0 6221 0 0:00:04 0:00:01 0:00:03 6220了一遍,可以看到GMM模型的聚类特点,能给出样本点属于每个簇的概率,取概率最大的簇为所属簇。
在最近几天的推送中,我们先后模拟了一维和两维的高斯分布的数据样本,实际上,我们已经实现的算法可以模拟更多维度的数据,因为假定了是D维,但是当维度很高时,我们往往不容易分析,计算效率慢,同时也容易发生奇异问题,尤其有几个维度具有强相关性时,那么应该怎么办呢?
因此,当我们面对一堆样本由100维组成的数据时,学会如何提取出主要的特征,是非常重要的。本节描述的协方差矩阵将会大展身手,常用的算法是PCA降维,这通常是数据预处理的常用降维手法,通过降维,一来方便画图展示,二来也是去掉次要矛盾解决主要矛盾的过程。
预知PCA降维的原理和操作过程,请看接下来的推送。
请记住:每天一小步,日积月累一大步!
《实例》阐述算法,通俗易懂,助您对算法的理解达到一个新高度。包含但不限于:经典算法,机器学习,深度学习,LeetCode 题解,Kaggle 实战。期待您的到来!