我正在对一些数据执行模糊聚类。我首先缩放数据框,因此每个变量都有 0 的平均值和 1. 的 sd 然后我从 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 个集群吗?我该如何解释?我不知道如何重新创建我的数据,因为它非常大。就像其他人以前遇到过一样?

最佳答案

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

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

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 个集群中每个集群的成员资格。

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

关于r - R 中的模糊 C 均值聚类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53284245/

10-12 18:10