混合模型,潜变量和EM算法(mixture model,latent variable and EM algorithm)(4)
#混合模型主题的系列笔记
#这一篇断续写了很长时间,细节还是很不让人满意
5.混合模型:基于模型的聚类及R包mclust
在介绍混合模型及其参数估计的EM算法之后,下面讨论混合模型的应用。
混合模型的主要应用之一是基于模型的聚类。在有限混合模型中,每一个成分对应一个类。这样关于合适的聚类方法以及聚类数目的问题转化为关于模型如何选择的问题,需要考量的是成分的分布(一般来说主要还是选择高斯混合模型,GMM)以及成分的数目。和通常所用的系统聚类法(或称层次聚类法)及k-means聚类法相比,基于混合模型的聚类并不是仅仅给出关于聚类样品的类标签,而是给出了每个聚类样品属于某一个类(作为模型成分的分布)的概率,并由此来决定类别的标签。
(1) 一个基本的基于模型的聚类算法可以分为三个步骤
先采用可凝聚的基于模型的层次聚类(model-based agglomerative hierarchical clustering)结果作为初始值,再采用EM算法估计模型参数,最后使用BIC准则选择模型和聚类数。
(5)聚类步骤:
a.选择最大的聚类数目M和一组要选择的混合模型
b.对每个模型运用基于模型的分层聚类,得到最大到M类的分类结果
c.以上面得到的初始聚类结果作为初值,对每个模型和2到M个类数使用EM算法估计参数
d.计算每一种情况下的BIC,选择BIC值最大的模型
(6)例,R包mclust
mclust包是采用上面所述算法开发的R包,用于基于正态混合模型的聚类,分类和密度估计
对MASS包的geyser作基于模型的聚类
library(MASS)
data(geyser)
library(mclust)
#基本的聚类结果
geyser.m<- Mclust(geyser)
summary(geyser.m,parameters = TRUE)
plot(geyser.m)#生成4张图
#模型选择的情况
geyser.bic<- mclustBIC(geyser)
summary(geyser.bic,data=geyser)
#输出:
classification table:
1 2 3 4
17 90 94 98
best BIC values:
VVI,4 VVV,4 EVI,4
-2768.548 -2786.697 -2789.319
关于模型选择的BIC值,在聚类结果的输出图中有完整的表示,在mclust包的算法中,关于协方差阵的参数化采用了如下表所示的形式(共9种):
#聚类结果的细节:
geyser.m$classification
给出每个观测所在的类标签
geyser.m$z
给出每个观测划分到各个类的概率
geyser.m<- Mclust(geyser,G=2)
指定分为两类
参:
基于模型的聚类方法:
[1]C. Fraley and A. E. Raftery. Model-based clustering, discriminant analysis and density estimation. Journal of the American Statistical Association, 97:611–631, 2002.
[2]Gan, Guojun and Ma, Chaoqun and Wu, Jianhong,
Data Clustering:Theory, Algorithms, and Applications
http://book.douban.com/subject/2859423/
正则化:
[3]C. Fraley and A. E. Raftery. Bayesian regularization for normal mixture estimation and model-based clustering. Journal of Classification, 24:155–181, 2007.
基于模型的分层聚类
[4]Model-Based Hierarchical Clustering
http://arxiv.org/ftp/arxiv/papers/1301/1301.3899.pdf
#这一篇断续写了很长时间,细节还是很不让人满意
5.混合模型:基于模型的聚类及R包mclust
在介绍混合模型及其参数估计的EM算法之后,下面讨论混合模型的应用。
混合模型的主要应用之一是基于模型的聚类。在有限混合模型中,每一个成分对应一个类。这样关于合适的聚类方法以及聚类数目的问题转化为关于模型如何选择的问题,需要考量的是成分的分布(一般来说主要还是选择高斯混合模型,GMM)以及成分的数目。和通常所用的系统聚类法(或称层次聚类法)及k-means聚类法相比,基于混合模型的聚类并不是仅仅给出关于聚类样品的类标签,而是给出了每个聚类样品属于某一个类(作为模型成分的分布)的概率,并由此来决定类别的标签。
(1) 一个基本的基于模型的聚类算法可以分为三个步骤
先采用可凝聚的基于模型的层次聚类(model-based agglomerative hierarchical clustering)结果作为初始值,再采用EM算法估计模型参数,最后使用BIC准则选择模型和聚类数。
![]() |
![]() |
![]() |
(5)聚类步骤:
a.选择最大的聚类数目M和一组要选择的混合模型
b.对每个模型运用基于模型的分层聚类,得到最大到M类的分类结果
c.以上面得到的初始聚类结果作为初值,对每个模型和2到M个类数使用EM算法估计参数
d.计算每一种情况下的BIC,选择BIC值最大的模型
(6)例,R包mclust
mclust包是采用上面所述算法开发的R包,用于基于正态混合模型的聚类,分类和密度估计
对MASS包的geyser作基于模型的聚类
library(MASS)
data(geyser)
library(mclust)
#基本的聚类结果
geyser.m<- Mclust(geyser)
summary(geyser.m,parameters = TRUE)
plot(geyser.m)#生成4张图
![]() |
BIC的比较 |
![]() |
聚类结果 |
![]() |
不确定分类的观测点 |
![]() |
混合模型密度等高线 |
#模型选择的情况
geyser.bic<- mclustBIC(geyser)
summary(geyser.bic,data=geyser)
#输出:
classification table:
1 2 3 4
17 90 94 98
best BIC values:
VVI,4 VVV,4 EVI,4
-2768.548 -2786.697 -2789.319
关于模型选择的BIC值,在聚类结果的输出图中有完整的表示,在mclust包的算法中,关于协方差阵的参数化采用了如下表所示的形式(共9种):
![]() |
#聚类结果的细节:
geyser.m$classification
给出每个观测所在的类标签
geyser.m$z
给出每个观测划分到各个类的概率
geyser.m<- Mclust(geyser,G=2)
指定分为两类
参:
基于模型的聚类方法:
[1]C. Fraley and A. E. Raftery. Model-based clustering, discriminant analysis and density estimation. Journal of the American Statistical Association, 97:611–631, 2002.
[2]Gan, Guojun and Ma, Chaoqun and Wu, Jianhong,
Data Clustering:Theory, Algorithms, and Applications
http://book.douban.com/subject/2859423/
正则化:
[3]C. Fraley and A. E. Raftery. Bayesian regularization for normal mixture estimation and model-based clustering. Journal of Classification, 24:155–181, 2007.
基于模型的分层聚类
[4]Model-Based Hierarchical Clustering
http://arxiv.org/ftp/arxiv/papers/1301/1301.3899.pdf
聚类我不懂,混合模型相当皮毛,但看到这种风格的文章内心还是有找到同道的快乐,嘻嘻。在我的理解里,倾向于把EM和mcmc和状态空间放到一个章节里来说。还有蒙特卡洛,吉布斯抽样和黑森林抽样,还有就是一些计算优化的东西。这些东西可把我折磨惨了。
请教一个问题:能不能画出潜变量每一个子潜在类别下的因子分布直方图呢?谢谢!
> 我来回应