无监督学习 聚类分析④
- EM(Expectation Maximization Algorithm)
1.EM算法的基本思想
假如我们随机选取了100名男生和100名女生,两百个人混在一起,而目前只有每个人学生的身高数据,我们既不知道每个身高数据所对应的性别,也不知道男生和女生两个群体的总体身高分布情况。首先我们假设男生身高分布符合170cm的正太分布,而女生身高符合160cm的正态分布。通过这个假设的参数,对所有的身高数据进行性别分类。当完成分类后,通过对预测的男生,女生两个群体的分布来修改之前假设的身高分部参数。如此循环,直至收敛。
2.EM算法的基本步骤
- EM是一个在已知部分相关变量的情况下,估计未知变量的迭代技术。EM的算法流程如下:
- 初始化分布参数
- 重复直到收敛:
- E步骤:估计未知参数的期望值,给出当前的参数估计。
- M步骤:重新估计分布参数,以使得数据的似然性最大,给出未知变量的期望估计。
3. 高斯混合模型
高斯混合模型(GMM,Gaussian Mixture Model)可以看成是EM算法的一种现实应用。利用这个模型可以解决聚类分析、机器视觉等领域中的许多实际问题。讨论EM算法时,我们并未指定样本来自于何种分布。实际应用中,常常假定样本是来自正态分布之总体的。也就是说,在进行聚类分析时,认为所有样本都来自具有不同参数控制的数个正态总体。例如前面讨论的男性女性身高问题,我们就可以假定样本数据是来自一个双正态分布混合模型。这便有了接下来要讨论的高斯混合模型。
4.mclust包
mclust包是聚类分析非常强大的一个包 帮助文档非常详尽,可以进行聚类、分类、密度分析。Mclust包方法有点“暴力”,聚类数目自定义,比如我选取的从1到20,然后一共14种模型,每一种模型都计算聚类数目从1到20的BIC值,最终确定最佳聚类数目,这种方法的思想很直接了当,但是弊端也就显然易见了——时间复杂度太高,效率低。
setwd("E:\\Rwork")
library(gclus)
data(wine)
head(wine)
dataset <- wine[,-1] #去除分类标签
dataset <- scale(dataset)
set.seed(1234)
library(mclust)
m_clust <- Mclust(as.matrix(dataset), G=1:20) #聚类数目从1一直试到20
summary(m_clust)
plot(m_clust, "BIC")
![img_272d2feb289eef8d68d5ffd56040f164.png](https://i-blog.csdnimg.cn/blog_migrate/514e2945afde30930961437f30e8281a.png)
5.结论
它们应该分别代表着相关性(完全正负相关——对角线、稍强正负相关——椭圆、无关——圆)等参数的改变对应的模型,BIC值越大则说明所选取的变量集合拟合效果越好** 上图中除了两个模型一直递增,其他的12模型数基本上都是在聚类数目为3的时候达到峰值,所以该算法由此得出最佳聚类数目为3的结论。