R,在多重对应分析之后发生分层聚类
我想聚类一个数据集(600000个观测值),对于每个集群,我想获得主要组件.
我的载体由一个电子邮件和30个定性变量组成. 每个定量变量有4个类:0,1,2和3. 所以我要做的第一件事是加载库FactoMineR并加载我的数据: library(FactoMineR) mydata = read.csv("/home/tom/Desktop/ACM/acm.csv") 然后我将我的变量设置为定性(虽然我不包括变量’email’): for(n in 1:length(mydata)){mydata[[n]] <- factor(mydata[[n]])} 我正在从我的向量中删除电子邮件: mydata2 = mydata[2:31] 我正在这个新数据集中运行MCA: mca.res <- MCA(mydata2) 我现在想要使用hcpc函数对我的数据集进行聚类: res.hcpc <- HCPC(mca.res) 但是我收到以下错误消息: Error: cannot allocate vector of size 1296.0 Gb 你觉得我应该怎么做?我的数据集太大了吗?我用的是hcpc功能吗? 解决方法
由于它使用层次聚类,HCPC需要计算600000 x 600000距离矩阵(约1,800亿个元素)的下三角形.你只是没有RAM来存储这个对象,即使你这样做,计算可能需要几个小时,如果不是几天完成.
关于聚类大数据集的Stack Overflow / Cross Validted进行了各种讨论;一些在R中的解决方案包括: k-means clustering in R on very large,sparse matrix?(bigkmeans) Cluster Big Data in R and Is Sampling Relevant?(克拉拉) 如果您想使用这些替代群集方法之一,您可以在您的示例中将其应用于mca.res $ind $coord. 为响应问题clustering very large dataset in R而建议的另一个想法是首先使用k均值来找到一定数量的聚类中心,然后使用层次聚类从那里构建树.该方法实际上是通过HCPC的kk参数实现的. 例如,使用FactoMineR中的茶叶数据集: library(FactoMineR) data(tea) ## run MCA as in ?MCA res.mca <- MCA(tea,quanti.sup = 19,quali.sup = c(20:36),graph = FALSE) ## run HCPC for all 300 individuals hc <- HCPC(res.mca,kk = Inf,consol = FALSE) ## run HCPC from 30 k means centres res.consol <- NULL ## bug work-around hc2 <- HCPC(res.mca,kk = 30,consol = FALSE) consol参数提供了使用k-means来合并来自层次聚类的聚类的选项;当kk设置为实数时,此选项不可用,因此在此处将consol设置为FALSE.对象res.consul设置为NULL以解决FactoMineR 1.27中的小错误. 下图显示了基于300个个体(kk = Inf)的聚类,并基于30 k意味着中心(kk = 30),用于绘制在前两个MCA轴上的数据: 可以看出结果非常相似.您应该可以轻松地将其应用于具有600或1000 k均值中心的数据,可能高达6000且具有8GB RAM.如果你想使用更大的数字,你可能想要使用bigkmeans,SpatialTools :: dist1和fastcluster :: hclust来编写更高效的版本. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |