我有一個由54 000行和幾列(7)組成的數據集。我的數值是數字和字母數字(定性和定量變量)。我想集羣使用功能hclust在R.集羣大數據集(定量/定性值)
它讓我們舉個例子:
X <- data.frame(rnorm(54000, sd = 0.3),
rnorm(54000, mean = 1, sd = 0.3),
sample(LETTERS[1:24], 54000, replace=TRUE),
sample(letters[1:10], 54000, replace=TRUE),
round(rnorm(54000,mean=25, sd=3)),
round(runif(n = 54000,min = 1000,max = 25000)),
round(runif(54000,0,200000)))
colnames(X) <- c("A","B","C","D","E","F","G")
如果我使用hclust功能是這樣的:
hclust(dist(X), method = "ward.D")
我收到此錯誤信息:
Error: cannot allocate vector of size 10.9 Gb
什麼問題?我正嘗試創建一個54k * 54k的矩陣,這個矩陣太大而無法通過我的PC(RAM的4Go)來計算。我讀過R3.0.0以後的軟件,現在有64位(能夠像我的例子那樣使用2.916e + 09矩陣),所以我的電腦有限制。我用stats/fastcluster/flashClust中的hclust試過,並得到同樣的問題。
在這個包,hclust描述那樣:
hclust(d, method="complete", members=NULL)
flashClust(d, method = "complete", members=NULL)
d a dissimilarity structure as produced by dist.
我們總是需要dist
矩陣,以使該功能工作。我也嘗試使用設置更高的R會話我的電腦的限制,這一點:
memory.limit(size = 4014)
memory.size(max = TRUE)
問:
是否有可能使用一個層次聚類(或類似的方式集羣數據)而不使用這個dist()
矩陣來定量/定性數據集與R?
編輯:
關於K-手段:
K-均值的方法數值組成的大數據集的偉大工程。在我的例子中,我得到了數字和字母數字值。我試着變換分析我定性變量轉換成二進制數值變量做K-均值的過程:(例子)
第一數據幀:
Col1 Col2 Col3
1 12 43.93145 Alpha
2 45 44.76081 Beta
3 48 45.09708 Gamma
4 31 45.42278 Alpha
5 12 46.53709 Delta
6 7 39.07841 Beta
7 78 49.60947 Alpha
如果我變成二元變量,我得到這個:
Col1 Col2 Alpha Beta Gamma Delta
1 12 44.29369 1 0 0 0
2 45 43.90610 0 1 0 0
3 48 44.82659 0 0 1 0
4 31 43.09096 1 0 0 0
5 12 42.71190 0 0 0 1
6 7 43.71710 0 1 0 0
7 78 42.24293 1 0 0 0
這是確定的,如果我只獲得了一些模式,但在實際的數據集,我們可以得到一個5萬行的基礎約10.000模式。我不認爲k-means是解決這類問題的方法。
我相信,在這種情況下,你唯一的選擇,據我所知,就是使用'kmeans'直接或'FactorMineR :: HCPC'函數內部作爲回答[點擊這裏](http://stackoverflow.com/questions/27269555/r-issue-with-a-hierarchical-clustering-after-a-multiple-correspondence-analysis) – cdeterman
@cedeterman:謝謝,感謝您的幫助。我嘗試了兩種使用k-means的新模型,但它不適合回答我的問題。 –