首页 > 解决方案 > R中的模糊C均值聚类

问题描述

我正在对一些数据执行模糊聚类。我首先缩放了数据框,所以每个变量的平均值0和 sd1.然后我clValid从包中运行函数,clValid如下所示:

library(dplyr)
df<-iris[,-5] # I do not use iris, but to make reproducible
clust<-sapply(df,scale)
intvalid <- clValid(clust, 2:10, clMethods=c("fanny"),
                validation="internal", maxitems = 1000)

结果告诉我 4 将是最好的集群数量。因此我fanny从包中运行函数cluster如下:

res.fanny <- fanny(clust, 4, metric='SqEuclidean')
res.fanny$coeff
res.fanny$k.crisp
df$fuzzy<-res.fanny$clustering
profile<-ddply(df,.(fuzzy),summarize,
           count=length(fuzzy))

但是,在查看 时profile,我只有 3 个集群而不是 4 个。这怎么可能?我应该选择 3 个集群而不是 4 个集群吗?我该如何解释?我不知道如何重新创建我的数据,因为它非常大。正如其他人之前遇到过的那样?

标签: rcluster-analysis

解决方案


这是基于有限信息的答案尝试,它可能无法完全解决提问者的情况。听起来可能还有其他问题。在聊天中,他们表示他们遇到了我无法重现的其他错误。Fanny 将根据指标计算并将项目分配给“清晰”的集群。它还将生成一个矩阵,显示可以使用 访问的模糊聚类分配membership

memb.exp提问者描述的问题可以通过使用 iris 数据集增加参数来重现。这是一个例子:

library(plyr)
library(clValid)
library(cluster)
df<-iris[,-5] # I do not use iris, but to make reproducible
clust<-sapply(df,scale)

res.fanny <- fanny(clust, 4, metric='SqEuclidean', memb.exp = 2) 

调用res.fanny$k.crisp显示这会产生 4 个清晰的簇。

res.fanny14 <- fanny(clust, 4, metric='SqEuclidean', memb.exp = 14)

调用res.fanny14$k.crisp表明这会产生 3 个清晰的簇。

人们仍然可以使用res.fanny14$membership.

如果您有充分的理由认为应该有 4 个清晰的集群,则可以减少该memb.exp参数。这将收紧集群分配。或者,如果您正在进行某种监督学习,调整此参数的一个过程是保留一些测试数据,进行超参数网格搜索,然后选择在您的首选指标上产生最佳结果的值。然而,如果不了解更多关于任务、数据或提问者试图完成的内容,很难提出比这更多的建议。


推荐阅读