模型选择 - mclust

Posted

技术标签:

【中文标题】模型选择 - mclust【英文标题】:model selection - mclust 【发布时间】:2017-03-22 17:38:45 【问题描述】:

我使用包 MCLUST 在 R 中进行了潜在类/集群分析。我对我的论文进行了修改并重新提交,审稿人建议为集群解决方案制作一个拟合指数表(目前我刚刚在文中报告了 BIC)。当我查看一些使用 LCA 方法的论文时,他们报告了 BIC、样本大小调整后的 BIC 和熵; MCLUST 给出的唯一拟合统计量是 BIC。我可以找到熵图,但找不到熵统计量。我在 Mplus 上重新运行我的分析有点晚了(我发现在这些论文中它被用于 LCA)。坦率地说,使用另一个聚类包重新运行我的分析有点晚了。从我所有的阅读中,听起来 MCLUST 做的事情与其他一些 k-means 集群方法略有不同。 还 - 似乎有时选择了 BIC 最低的模型(在某些论文中),但在 MCLUST 中选择了最高的模型?为什么?

所以,tldr;使用 MCLUST 时,还有哪些其他模型选择统计数据会在文章中报告?只有bIC是标准的/可以的吗?我该如何证明这一点?

【问题讨论】:

【参考方案1】:

只是一些想法,之前使用过 mclust。

1) mclust 使用正确的 BIC 选择方法;看到这个帖子:

https://stats.stackexchange.com/questions/237220/mclust-model-selection

看到最底部,但总结一下,使用 BIC 取决于您是否在公式中使用负号,优化低还是高:

BIC 的一般定义是 BIC=-2×ln(L(θ|x))+k×ln(n)BIC=-2×ln(L(θ|x))+k×ln(n); mclust 没有 包括负面成分。

2) mclust 使用混合模型来执行聚类(即基于模型);它与 k-means 完全不同,所以我会小心措辞,即它“与其他一些 k-means 集群方法略有不同”(主要是这里的“其他”暗示); mclust手册中简要描述了模型选择的过程:

mclust 通过 EM 算法为根据 BIC 选择的模型和组件数量提供了一个拟合数据的高斯混合。根据参考文献部分引用的文章中描述的方法,根据熵标准分层组合相应的组件。类数在 BIC 选择的一类和一类之间的解作为一个clustCombi 类对象返回。

查看实际论文以获得详尽的解释更有用:

https://www.stat.washington.edu/raftery/Research/PDF/Baudry2010.pdf 或这里https://www.ncbi.nlm.nih.gov/pmc/articles/PMC2953822/

mclust 提供的熵图被解释为用于因子分析的碎石图(即,通过寻找肘部来确定最佳类别数);我认为碎石图有助于证明选择集群数量的合理性,这些图属于附录。

mclust 除了返回 BIC 之外,还返回 ICL 统计信息,因此您可以选择将其报告给审阅者作为妥协:

https://cran.r-project.org/web/packages/mclust/vignettes/mclust.html(参见示例了解如何让它输出统计信息)

3) 如果您想创建一个 entPlot 值表,您可以像这样提取它们(来自 ?entPlot 示例):

## Not run: 
data(Baudry_etal_2010_JCGS_examples)
# run Mclust to get the MclustOutput
output <- clustCombi(ex4.2, modelNames = "VII") 

entPlot(output$MclustOutput$z, output$combiM, reg = c(2,3)) 
# legend: in red, the single-change-point piecewise linear regression;
#         in blue, the two-change-point piecewise linear regression.

# added code to extract entropy values from the plot

combiM <- output$combiM
Kmax <- ncol(output$MclustOutput$z)
z0 <- output$MclustOutput$z
ent <- numeric()

for (K in Kmax:1) 
  z0 <- t(combiM[[K]] %*% t(z0))
  ent[K] <- -sum(mclust:::xlog(z0))


data.frame(`Number of clusters` = 1:Kmax, `Entropy` = round(ent, 3))

  Number.of.clusters Entropy
1                  1   0.000
2                  2   0.000
3                  3   0.079
4                  4   0.890
5                  5   6.361
6                  6  20.158
7                  7  35.336
8                  8 158.008

【讨论】:

以上是关于模型选择 - mclust的主要内容,如果未能解决你的问题,请参考以下文章

ML: 聚类算法R包 - 模型聚类

R语言实现期望最大化聚类(EM算法)

UDP套接字可以用异步选择选择模型吗

三.Windows I/O模型之事件选择(WSAEventSelect )模型

windows下的IO模型之事件选择(WSAEventSelect)模型

机器学习综述:机器学习中的模型评价模型选择与算法选择