wos*_*tom 5 r cluster-computing acm bigdata
我想聚类一个数据集(600000个观测值),对于每个集群,我想获得主要组件.我的载体由一个电子邮件和30个定性变量组成.每个定量变量有4个类:0,1,2和3.
所以我要做的第一件事是加载库FactoMineR并加载我的数据:
library(FactoMineR)
mydata = read.csv("/home/tom/Desktop/ACM/acm.csv")
Run Code Online (Sandbox Code Playgroud)
然后我将我的变量设置为定性(虽然我不包括变量'email'):
for(n in 1:length(mydata)){mydata[[n]] <- factor(mydata[[n]])}
Run Code Online (Sandbox Code Playgroud)
我正在从我的向量中删除电子邮件:
mydata2 = mydata[2:31]
Run Code Online (Sandbox Code Playgroud)
我正在这个新数据集中运行MCA:
mca.res <- MCA(mydata2)
Run Code Online (Sandbox Code Playgroud)
我现在想要使用hcpc函数对我的数据集进行聚类:
res.hcpc <- HCPC(mca.res)
Run Code Online (Sandbox Code Playgroud)
但是我收到以下错误消息:
Error: cannot allocate vector of size 1296.0 Gb
Run Code Online (Sandbox Code Playgroud)
你觉得我应该怎么做?我的数据集太大了吗?我用的是hcpc功能吗?
由于它使用层次聚类,因此HCPC需要计算600000 x 600000距离矩阵(约1,800亿个元素)的下三角形.你只是没有RAM来存储这个对象,即使你这样做,计算可能需要几个小时,如果不是几天完成.
关于聚类大数据集的Stack Overflow/Cross Validted进行了各种讨论; 一些在R中的解决方案包括:
k-意味着在非常大的稀疏矩阵上聚类?(bigkmeans)
R中的群集大数据和采样是否相关?(clara)
如果要使用这些替代群集方法之一,则可以mca.res$ind$coord在示例中应用它.
为响应在R中聚类非常大的数据集的问题而建议的另一个想法是首先使用k均值来找到一定数量的聚类中心,然后使用层次聚类从那里构建树.这个方法实际上是通过kk参数实现的HCPC.
例如,使用以下tea数据集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)
Run Code Online (Sandbox Code Playgroud)
该consol论证提供了使用k-means来合并来自层次聚类的聚类的选项; 当kk设置为实数时,此选项不可用,因此consol设置为FALSE此处.该对象res.consul设置为NULL在FactoMineR1.27中解决一个小错误.
下图显示了基于300个人(kk = Inf)的群集,并基于30 k表示中心(kk = 30),用于绘制在前两个MCA轴上的数据:

可以看出结果非常相似.您应该可以轻松地将其应用于具有600或1000 k均值中心的数据,可能高达6000且具有8GB RAM.如果你想使用一个更大的数字,你可能想使用的代码更高效的版本bigkmeans,SpatialTools::dist1和fastcluster::hclust.
该错误消息通常表明 R 没有足够的 RAM 来完成命令。我猜你是在 32 位 R 中运行这个程序,可能是在 Windows 下?如果是这种情况,那么终止其他进程并删除未使用的 R 变量可能会有所帮助:例如,您可以尝试删除mydata,mydata2
rm(mydata, mydata2)
Run Code Online (Sandbox Code Playgroud)
(以及所有其他不必要的 R 变量)在执行生成错误的命令之前。然而,最终的解决方案通常是切换到 64 位 R,最好是在 64 位 Linux 下并且具有适当的 RAM 量,另请参阅此处:
R 内存分配“错误:无法分配大小为 75.1 Mb 的向量”
http://r.789695.n4.nabble.com/Error-cannot-allocate-vector-of-size-td3629384.html
| 归档时间: |
|
| 查看次数: |
2418 次 |
| 最近记录: |