首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >预测R外的mclust聚类隶属度

预测R外的mclust聚类隶属度
EN

Stack Overflow用户
提问于 2017-09-04 20:32:50
回答 2查看 255关注 0票数 0

我用mclust在数据集中找到了集群。现在,我想将这些发现应用到外部非r软件中(因此,predict.Mclust不是以前类似问题中所建议的一种选择)来分类新的观测。我需要知道mclust是如何分类观察的。

由于mclust为每个簇输出一个中心和一个协方差矩阵,因此为每个观测和每个簇计算mahalanobis距离是合理的。然后,观测结果可以被归类为mahalonobi最近的星系团。然而,它似乎没有充分发挥作用。

使用模拟数据的示例代码(在本例中,我只使用一个dataset,d,并试图获得与mclust按照上面概述的mahalanobi方法所做的相同分类):

代码语言:javascript
复制
set.seed(123)
c1<-mvrnorm(100,mu=c(0,0),Sigma=matrix(c(2,0,0,2),ncol=2))
c2<-mvrnorm(200,mu=c(3,3),Sigma=matrix(c(3,0,0,3),ncol=2))

d<-rbind(c1,c2)
m<-Mclust(d)

int_class<-m$classification

clust1_cov<-m$parameters$variance$sigma[,,1]
clust1_center<-m$parameters$mean[,1]
clust2_cov<-m$parameters$variance$sigma[,,2]
clust2_center<-m$parameters$mean[,2]

mahal_clust1<-mahalanobis(d,cov=clust1_cov,center=clust1_center)
mahal_clust2<-mahalanobis(d,cov=clust2_cov,center=clust2_center)
mahal_clust_dist<-cbind(mahal_clust1,mahal_clust2)

mahal_classification<-apply(mahal_clust_dist,1,function(x){ 
  match(min(x),x)
})

table(int_class,mahal_classification)
#List mahalanobis distance for miss-classified observations:
mahal_clust_dist[mahal_classification!=int_class,]

plot(m,what="classification")
#Indicate miss-classified observations:
points(d[mahal_classification!=int_class,],pch="X")

#Results:
> table(int_class,mahal_classification)
         mahal_classification
int_class   1   2
        1 124   0
        2   5 171
> mahal_clust_dist[mahal_classification!=int_class,]
     mahal_clust1 mahal_clust2
[1,]     1.340450     1.978224
[2,]     1.607045     1.717490
[3,]     3.545037     3.938316
[4,]     4.647557     5.081306
[5,]     1.570491     2.193004

有五种观测结果被划分为马哈拉诺比方法和mclust方法的不同。在地块中,它们是两个集群之间的中间点。有人能告诉我为什么它不起作用,我如何能够模仿mclust和predict.Mclust的内部分类?

EN

回答 2

Stack Overflow用户

发布于 2017-09-05 08:24:13

在提出上述问题后,我做了一些额外的研究(thx LoBu),发现关键是计算某一观测属于某一簇的后验概率( pp ),并根据最大pp进行分类。以下工作:

代码语言:javascript
复制
denom<-rep(0,nrow(d))
pp_matrix<-matrix(rep(NA,nrow(d)*2),nrow=nrow(d))
for(i in 1:2){
  denom<-denom+m$parameters$pro[i]*dmvnorm(d,m$parameters$mean[,i],m$parameters$variance$sigma[,,i])
}
for(i in 1:2){
  pp_matrix[,i]<-m$parameters$pro[i]*dmvnorm(d,m$parameters$mean[,i],m$parameters$variance$sigma[,,i]) / denom
}

pp_class<-apply(pp_matrix,1,function(x){ 
  match(max(x),x)
})
table(pp_class,m$classification)
#Result:
pp_class   1   2
       1 124   0
       2   0 176

但如果有人用外行的术语来解释马哈拉诺比和pp方法的区别,我会非常高兴的。“混合概率”(m美元参数$pro)意味着什么?

票数 0
EN

Stack Overflow用户

发布于 2017-09-10 10:54:08

除了Mahalanobis距离之外,还需要考虑集群的权重。

当它们重叠时,它们的相对重要性就很重要了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46043709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档