我正在对一些数据执行模糊聚类。我首先缩放数据框,因此每个变量都有 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/