2014-12-03 112 views
5

我想聚集一個數據集(600000個觀測值),並且對於每個我想要的主成分的聚類。 我的向量由一個電子郵件和30個定性變量組成。 每個定量變量有4類:0,1,2和3R,多重對應分析後發生分層聚類

我這樣做第一件事就是加載庫FactoMineR並加載我的數據:

library(FactoMineR) 
mydata = read.csv("/home/tom/Desktop/ACM/acm.csv") 

然後我設置我的變量爲定性的(我不包括變量「電子郵件」雖然):

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功能嗎?

+0

我能夠用一個啞數據集複製問題。我認爲你正以正確的方式使用HCPC,以及MCA。我想你可能想研究稀疏聚類算法,因爲HCPC是基於agnes的。 CLARA可能有用,但其他可用。 – 2014-12-08 11:28:21

回答

0

該錯誤消息通常表明R沒有足夠的RAM來完成該命令。我想你在32位R內運行這個,可能在Windows下運行?如果是這樣的話,那麼殺死其他進程和刪除未使用的R參數有可能會有所幫助:例如,你可以嘗試刪除mydatamydata2

rm(mydata, mydata2) 

(以及所有其他非必要的R參數)在執行生成錯誤的命令之前。然而,在一般的最終解決方案是切換到64位的R,優選在64位Linux和一個體面RAM量,也可參見這裏:

R memory management/cannot allocate vector of size n Mb

R Memory Allocation "Error: cannot allocate vector of size 75.1 Mb"

http://r.789695.n4.nabble.com/Error-cannot-allocate-vector-of-size-td3629384.html

+0

我在64位R上爲32位ram和12個內核的Linux機器複製了這個問題,這只是一個大數據問題,而不是32位問題。 – 2014-12-08 15:22:30

+0

1296.0 Gb確實很大。 – 2014-12-08 16:13:11

+0

@FMKerckhof我在64位R上使用Ubuntu。所以你的觀點是我沒有辦法做到? – woshitom 2014-12-11 03:23:46

5

由於它使用分層聚類,HCPC需要計算600000 x 600000距離矩陣的下三角(約1800億個元素)。你根本沒有RAM來存儲這個對象,即使你這樣做了,如果沒有完成日期,計算可能需要幾小時。

關於聚類大型數據集有堆棧溢出/交叉驗證的各種討論;一些帶有R中的解決方案包括:

k-means clustering in R on very large, sparse matrix?bigkmeans

Cluster Big Data in R and Is Sampling Relevant?clara

如果你想使用這些替代聚類方法之一,你將它應用到mca.res$ind$coord在你的榜樣。

針對問題clustering very large dataset in R提出的另一個想法是首先使用k均值來找到一定數量的聚類中心,然後使用層次聚類從那裏構建樹。該方法實際上是通過HCPC的參數kk實現的。

例如,使用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) 

consol該參數提供了使用k均值合併來自分級聚類的聚類的選項;此選項在kk設置爲實數時不可用,因此consol在此設置爲FALSE。對象res.consul設置爲NULL以解決FactoMineR 1.27中的小錯誤。

以下情節顯示了基於300個個體(kk = Inf)和基於簇的30 k表示中心(kk = 30)用於數據的前兩個MCA繪製軸:

enter image description here

它可以看出結果非常相似。您應該可以輕鬆地將這個數據應用於600或1000 k平均值中心的數據,也可以使用8 GB RAM的高達6000。如果你想使用更大的數字,你可能想使用bigkmeans,SpatialTools::dist1fastcluster::hclust來編寫更高效的版本。