2016-07-06 42 views
3

我有一個由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是解決這類問題的方法。

+0

我相信,在這種情況下,你唯一的選擇,據我所知,就是使用'kmeans'直接或'FactorMineR :: HCPC'函數內部作爲回答[點擊這裏](http://stackoverflow.com/questions/27269555/r-issue-with-a-hierarchical-clustering-after-a-multiple-correspondence-analysis) – cdeterman

+0

@cedeterman:謝謝,感謝您的幫助。我嘗試了兩種使用k-means的新模型,但它不適合回答我的問題。 –

回答

1

從閱讀你的問題,似乎有2個問題:

1. You have a fairly large amount of observations for clustering 
2. The categorical variables have high cardinality 

我的建議是:

1)你可以只取一個樣本,並使用fastcluster::hclust,或使用clara。 可能在整理出2)你可以使用更多的觀察,在任何情況下它可能可以使用一個樣本。嘗試對這些類別進行分層抽樣。

2)您基本上需要用數字格式來表示這些類別,而不需要增加10000列。您可以使用PCA或其離散版本。 的幾個問題處理這個問題: q1q2

+1

感謝您的時間,感謝您。我會嘗試使用你的建議,稍後我會將我的代碼作爲anwer發佈。 –