mclust(Model-based clustering) 能够基于高斯有限混合模型进行聚类,分类以及密度估计(density estimation)。对于具有各种协方差结构的高斯混合模型,它提供了根据EM算法的参数预测函数。它也提供了根据模型进行模拟的函数。还提供了一类函数,整合了基于模型的层次聚类,混合估计的EM算法,用于聚类、密度估计和判别分析中综合性策略的贝叶斯信息判别标准。最后还有一类函数能够对聚类,分类和密度估计结果中的拟合模型进行可视化展示。

简而言之,mclust在R语言上实现了基于高斯有限混合模型聚类分类密度估计分析,并且还有专门的可视化函数展示分析结果。

mclust功能相似的其他R包: 'Rmixmod', 'mixture', 'EMCluster', 'mixtools', 'bgmm', 'flexmix'

安装和加载

在已有的R语言的基础上,只需要运行如下代码即可

# 安装
install.packages("mclust")
# 加载
library(mclust)

聚类实战

以一个例子来介绍一下如何使用mclust进行聚类分析。我们得要先加载一个来自于R包'gclus'的数据集'wine',该数据集有178行,分别是不同区域的品种葡萄, 14列,其中后13列是化学分析的测量值。我们的目标是将其进行分类。

第一步: 加载数据集

install.packages("gclus")
data("wine", package = "gclus")
dim(wine)

第二步 : 使用Mclust做聚类分析. Mclust主要功能就是分析当前的提供的数据是由什么统计模型

# 第一列和聚类无关
X <- data.matrix(wine[,-1])
mod <- Mclust(X)

直接在交互行输入mod会得到如下信息

'Mclust' model object: (VVE,3) Available components: [1] "call"           "data"           "modelName"     [4] "n"              "d"              "G"             [7] "BIC"            "bic"            "loglik"
[10] "df"             "hypvol"         "parameters"
[13] "z"              "classification" "uncertainty" 

这里需要对结果稍作解释,第一行告诉我们'Mclust'以VVE模型将数据分为3类。第3行开始,它告诉我们'Mclust'的输出结果中包含了如下内容,我们可以通过$来提取。举个例子,我们提取Mclust的聚类结果和已知结果进行比较

table(wine$Class, mod$classification)
# 如下是输出信息1  2  31 59  0  02  0 69  23  0  0 48
# adjustedRandIndex:评估聚类效果
adjustedRandIndex(wine$Class, mod$classification)

从结果中,我们发现仅有2例没有正确聚类,说明Mclust的效果很好。但是随之而来的问题是,Mclust如何挑选模型以及它为什么认为聚成3类比较合适呢?我们可以根据什么信息进行模型选择呢?

模型选择

为了解答上面的问题,我们需要稍微了解点Mclust的原理。和其他基于模型的方法类似,Mclust假设观测数据是一个或多个混合高斯分布的抽样结果,Mclust就需要根据现有数据去推断最优可能的模型参数,以及是由 q几组分布抽样而成。mclust一共提供了14种模型(见下表),可以用?mclustModelNames可以查看mclust提供的所有模型。

为了对模型有一个直观的理解,mclust提供了这些模型数据分为三组前提下在二维中的形状。

继续回到之前的问题,Mclust如何确定模型和确定分组数目。之前我们调用Mclust时,除了必须设置的输入参数,没有修改其他参数。其实Mclust可以设置的参数不少,和问题直接相关的是如下两个参数

  • G: 分组数,默认情况下是1:9
  • modelNames: 待拟合的模型,默认使用所有14种。

也就是,Mclust默认得到14种模型1到9组的分析结果,然后根据一定的标准选择最终的模型和分组数。

Mclust提供了两种方法用于评估不同模型在不同分组下的可能性

  • BIC( Bayesian Information Criterion ): 贝叶斯信息判别标准
  • ICL( integrated complete-data likelihood ): 综合完全数据可能性

Mclust默认用的就是BIC,因此我们可以用plot.Mclust绘制其中BIC变化曲线

plot.Mclust(mod, what = "BIC", ylim = range(mod$BIC[,-(1:2)], na.rm = TRUE), legendArgs = list(x = "bottomleft", cex =0.7))

Mclucst会选择其中BIC最大的模型和分组作为最终的结果。

此外我们可以用MclustBICMclustICL分别进行计算

par(mfrow=c(1,2))
BIC <- mclustBIC(X)
ICL <- mclustICL(X)

从中选择最佳的模型分组和模型作为输入

mod2 <- Mclust(X, G = 3, modelNames = "VVE", x=BIC)

可视化展示

mclust为不同的输出都提供了对应的泛型函数用于可视化,你需要用plot就能得到结果。例如对之前的聚类结果在二维空间展示

drmod <- MclustDR(mod, lambda = 1)
plot(drmod)
# 会提供一些列选项让你选择, 展示不同的结果
# Dimension reduction for model-based clustering and classification plots: 1: scatterplot
2: contour
3: classification
4: boundaries
5: density
6: evalues
# 以1为例

mclust还有很多其他功能,例如密度估计,自举推断(Bootstrap inference),这些内容建议阅读"mclust 5: Clustering, Classification and Density Estimation Using Gaussian Finite Mixture Models "

推荐阅读

想要更好的学习这个R包的使用,还需要去学习如下概念

  • EM算法( expectation–maximization algorithm )
  • BIC
  • MLE(maximum likelihood estimator)

----

版权声明:本博客所有文章除特别声明外,均采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 (CC BY-NC-ND 4.0) 进行许可。

使用mclust进行聚类分析相关推荐

  1. 聚类分析简单介绍(附R对应函数介绍)

    聚类分析是一种机器学习领域最常用的分类方法,它在在客户分类,文本分类,基因识别,空间数据处理,卫星图片处理,医疗图像自动检测等领域有着广泛应用.聚类就是将相同,相似的对象划分到同一个组中,聚类分析事前 ...

  2. R语言多元统计包简介:各种假设检验 统计方法 聚类分析 数据处理

    转载自:http://blog.csdn.net/duqi_yc/article/details/9446707 www.biostatistic.net/统计分析 生物信息 sas matlab R ...

  3. python聚类分析如何确定分类个数_确定聚类分析中的类别个数的方法

    1.gap statistic 以k-means聚类为例,对于一个聚类个数k,首先利用k-means聚类将样本聚成k类,然后计算k类中各类内各点与类中心的距离加和W(ki),进而计算k类的距离加和W( ...

  4. 《R语言与数据挖掘》⑦聚类分析建模

    书籍:<R语言与数据挖掘> 作者:张良均 出版社:机械工业出版社 ISBN:9787111540526 本书由北京华章图文信息有限公司授权杭州云悦读网络有限公司电子版制作与发行 版权所有· ...

  5. 市场研究中的数据分析知识整理 (三)-聚类分析

    4 聚类分析 聚类和判别作为统计学习(通过拟合统计模型,从数据中学习)的分类之一,同样可以分为有监督式和无监督式. 市场研究中,聚类和判别更多适用有监督式.即目标对象的在营销活动后的反应已知,通过目标 ...

  6. #R# R语言多元统计包简介:各种假设检验 统计方法 聚类分析 数据处理

    www.biostatistic.net/ 统计分析 生物信息 sas matlab R语言 Multivariate Statistics (多元统计) 网址: http://cran.r-proj ...

  7. SPSS聚类分析:K均值聚类分析

    SPSS聚类分析:K均值聚类分析 一.概念:(分析-分类-K均值聚类) 1.此过程使用可以处理大量个案的算法,根据选定的特征尝试对相对均一的个案组进行标识.不过,该算法要求您指定聚类的个数.如果知道, ...

  8. 深入浅出聚类算法!如何对王者英雄聚类分析,探索英雄之间的秘密

    Datawhale 作者:小一,Datawhale优秀学习者 寄语:首先,对聚类算法进行了介绍:然后,解释了EM算法E步.M步的原理:最后,对sklearn参数进行了详解,并对王者荣耀英雄利用EM算法 ...

  9. 聚类分析案例:探究用户对物品类别的喜好细分降维

    聚类分析案例:探究用户对物品类别的喜好细分降维 数据如下: order_products__prior.csv:订单与商品信息 字段:order_id, product_id, add_to_cart ...

最新文章

  1. wps 模拟分析 规划求解_入行十年,我是如何解决模流分析准确性问题的
  2. 《R语言与数据挖掘最佳实践和经典案例》—— 第3章 数 据 探 索
  3. openFeign 服务接口的调用02—— openFeign 的使用步骤
  4. [深度学习] Attention机制,一文搞懂从实例到原理
  5. 使用org.apache.commons.io.FileUtils,IOUtils工具类操作文件
  6. 大学python教材思维导图_Python核心知识体系的14张思维导图
  7. web应用调试工具_如何使用浏览器开发人员工具调试渐进式Web应用程序
  8. java怎么指定父窗口大小_[Java教程]jQuery如何获取div距离窗口顶部或者父元素顶部的距离...
  9. tar打包/解包用法
  10. 狐狸抓老鼠,为何东北向才会成功
  11. R语言安装~R,Rstudio
  12. c语言飞机订票系统作用,C语言飞机订票系统方案
  13. 效果降临日历2009
  14. IEEE 802.3标准简介以及各分类标准汇总
  15. php通过imap获取腾讯企业邮箱信息后的解码处理
  16. 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。
  17. linux中权限设置,Linux 权限设置chmod
  18. JSF集成Spring
  19. gaussdb200 理论
  20. python在地图上画路线_使用Python和Perl绘制北京跑步地图

热门文章

  1. iRobot 推出 Create 3,内置 ROS 2 机器人开发平台(转载)
  2. ASRock B650M Riptide AMD Ryzen 7 7800X3D电脑 Hackintosh 黑苹果efi引导文件
  3. 图像彩色化方法(深度学习)
  4. 小陈学js Arguments
  5. 审计溯源 | IP-guard终端操作审计,助力高效防控泄密风险
  6. Server2012R2下安装intel 82579v网卡驱动
  7. mandrake安装INTEL e1000网卡驱动
  8. 判断一个数是奇数还是偶数
  9. reflection removal
  10. 变时尚 Peugeot 307CC