【发布时间】:2016-08-18 17:48:07
【问题描述】:
作为一个对 R 比较陌生的人,我在创建 for 循环时遇到了问题。
我有一个非常大的数据集,其中包含 9000 个观察值和 25 个分类变量,我已将其转换为二进制数据并进行了层次聚类。现在我想尝试使用从kmodes$withindiff 输出的“每个集群的集群内简单匹配距离”来尝试 K-Modes 聚类以生成肘部图。我可以对每个 k in 1:8 集群求和以获得肘部图。
library(klaR)
for(k in 1:8)
{
WCSM[k] <- sum(kmodes(data,k,iter.max=100)$withindiff)
}
plot(1:8,WCSM,type="b", xlab="Number of Clusters",ylab="Within-Cluster
Simple-Matching Distance Summed", main="K-modes Elbow Plot")
我的问题是我想从 k 模式中获得更多输出。对于每个k in 1:8,我想获得整数向量,指示每个对象分配到的集群,由kmodes$cluster 给出。我需要创建一个循环遍历每个 k in 1:8 的 for 循环,并将每个输出保存到 8 个单独的向量中。但我不知道如何做这样的 for 循环。我可以分别运行 8 行代码,但它们每行都需要 15 分钟才能运行 iter.max=10,因此将其增加到 iter.max=100 需要保持运行一夜,这样循环才会有用。
cl.kmodes2=kmodes(data, 2,iter.max=100)
cl.kmodes3=kmodes(data, 3,iter.max=100)
cl.kmodes4=kmodes(data, 4,iter.max=100)
cl.kmodes5=kmodes(data, 5,iter.max=100)
cl.kmodes6=kmodes(data, 6,iter.max=100)
cl.kmodes7=kmodes(data, 7,iter.max=100)
cl.kmodes8=kmodes(data, 8,iter.max=100)
最终,我想通过获取调整后的兰德指数来比较分层二元聚类与 k 模式聚类的结果。例如,在 k=4 处为分层集群切割树,并将其与 k-modes 的 4 集群解决方案进行比较:
dist.binary = dist(data, method="binary")
cl.binary = hclust(dist.binary, method="complete")
hcl.4 = cutree(cl.binary, k = 4)
tab = table(hcl.4, cl.kmodes4$cluster)
library(e1071)
classAgreement(tab)
【问题讨论】:
标签: r for-loop cluster-analysis