R、 多重对应分析后的分层聚类问题

R、 多重对应分析后的分层聚类问题,r,bigdata,cluster-computing,R,Bigdata,Cluster Computing,我想对一个数据集(600000个观测值)进行聚类,并为每个聚类获取主成分。 我的向量由一封电子邮件和30个定性变量组成。 每个数量变量有4类:0、1、2和3 所以我要做的第一件事是加载库FactoMineR并加载我的数据: library(FactoMineR) mydata = read.csv("/home/tom/Desktop/ACM/acm.csv") 然后,我将变量设置为定性变量(但我不包括“email”变量): 我正在这个新数据集中运行MCA: mca.res <- MCA

我想对一个数据集(600000个观测值)进行聚类,并为每个聚类获取主成分。 我的向量由一封电子邮件和30个定性变量组成。 每个数量变量有4类:0、1、2和3

所以我要做的第一件事是加载库FactoMineR并加载我的数据:

library(FactoMineR)
mydata = read.csv("/home/tom/Desktop/ACM/acm.csv")
然后,我将变量设置为定性变量(但我不包括“email”变量):

我正在这个新数据集中运行MCA:

mca.res <- MCA(mydata2)

你觉得我该怎么办?我的数据集是否太大?我是否很好地使用了hcpc功能?

该错误消息通常表示R没有足够的RAM可供使用,无法完成该命令。我猜你是在32位R内运行的,可能是在Windows下?如果是这种情况,那么终止其他进程并删除未使用的R变量可能会有所帮助:例如,您可以尝试使用删除
mydata
mydata2

rm(mydata, mydata2) 
(以及所有其他非必要的R变量)执行生成错误的命令之前。然而,最终的解决方案通常是切换到64位R,最好是在64位Linux下,并具有适当的RAM量,另请参见此处:


由于它使用分层聚类,
HCPC
需要计算600000 x 600000距离矩阵(约1800亿个元素)的下三角。你根本没有内存来存储这个对象,即使你有,计算可能需要几个小时甚至几天才能完成

在集群大型数据集上,对堆栈溢出/交叉验证进行了各种讨论;R中的一些解决方案包括:

bigkmeans

clara

如果您想使用这些可选的集群方法之一,您可以将其应用于示例中的
mca.res$ind$coord

针对这个问题提出的另一个想法是,首先使用k方法找到一定数量的聚类中心,然后使用层次聚类从中构建树。此方法实际上是通过
HCPC
kk
参数实现的

例如,使用
FactoMineR
中的
tea
数据集:

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)
库(FactoMineR)
数据(tea)
##在?MCA中运行MCA

res.mca我能够用一个虚拟数据集复制这个问题。我认为您使用HCPC和MCA的方式是正确的。我认为您可能需要研究稀疏聚类算法,因为HCPC是基于agnes的。CLARA可能很有用,但其他的也可以。我在64位R for Linux机器上复制了这个问题,该机器有32 Gb ram和12个内核,这只是一个大数据问题,而不是32位问题。1296.0 Gb看起来确实很大。@FMKerckhof我在64位R上使用ubuntu。所以你的观点是我无能为力?如果你坚持最初的代码,只有很少的计算机有必要的内存,即使有,也需要相当长的时间才能运行。但是Heather Turner的上述答案是一个很好的解决方案(正如我在对您的问题的最初评论中所建议的:使用clara或其他稀疏聚类方法可能是您在这里的唯一解决方案)。
res.hcpc <- HCPC(mca.res)
Error: cannot allocate vector of size 1296.0 Gb
rm(mydata, mydata2) 
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)