我試圖實現中的R層次聚類:hclust();這需要由dist()創建的距離矩陣,但我的數據集有大約一百萬行,甚至EC2實例耗盡RAM。有沒有解決方法?此hclust()中的R對大數據集
回答
一個可能的解決方案是取樣資料,羣集小的樣本,然後把聚集的樣品訓練數據k近鄰和「分類」數據的其餘部分。這裏有一個1.1M行的簡單例子。我使用了5000分的樣本。原始數據沒有很好的分離,但只有1/220的數據,樣本是分開的。由於你的問題涉及到hclust
,我使用了。但是您可以使用其他聚類算法,如dbscan或mean shift。
## Generate data
set.seed(2017)
x = c(rnorm(250000, 0,0.9), rnorm(350000, 4,1), rnorm(500000, -5,1.1))
y = c(rnorm(250000, 0,0.9), rnorm(350000, 5.5,1), rnorm(500000, 5,1.1))
XY = data.frame(x,y)
Sample5K = sample(length(x), 5000) ## Downsample
## Cluster the sample
DM5K = dist(XY[Sample5K,])
HC5K = hclust(DM5K, method="single")
Groups = cutree(HC5K, 8)
Groups[Groups>4] = 4
plot(XY[Sample5K,], pch=20, col=rainbow(4, alpha=c(0.2,0.2,0.2,1))[Groups])
現在只要分配所有其他點到最近的集羣。
Core = which(Groups<4)
library(class)
knnClust = knn(XY[Sample5K[Core], ], XY, Groups[Core])
plot(XY, pch=20, col=rainbow(3, alpha=0.1)[knnClust])
幾個簡單的音符。
- 因爲我所創建的數據,我知道該選擇三個集羣。有一個真正的問題,你將不得不做出確定適當數量的羣集的工作。
- 取樣1/220可能完全錯過任何小簇。在小樣本中,它們看起來像噪音。
此聚類中的數據,它不這樣做的層次聚類。正常聚類只是將事物劃分爲一組數量,層次聚類爲所有數據生成一個「族譜」,爲每個單獨的數據點指定樹中的特定位置。 – Barker
@巴克 - 是的。我同意。它不是對整個數據進行分層聚類。 – G5W
最終結果是不是在所有層次聚類(或者最好是3個層次結構),你扔了所有的羣體之間的關係,當你砍倒,只用於前3個集羣爲您的分類。如果您保留了來自'hclust'的所有5000個組並將剩餘的數據分配給5000個分支中的每一個,那麼您可以得到一種半等級結構。然後,如果您在每個組上運行「hclust」,然後將它們掛鉤回樹中,則可以創建一個真正的層次結構(儘管存在一些潛在的錯誤)。 – Barker
- 1. 要通過hclust R中
- 2. 處理R中的大數據集
- 3. R knn大型數據集
- 4. 用R表示大數據集中數據幀的子集
- 5. hclust大小限制?
- 6. hclust函數的集羣列表
- 7. hclust()與cutree ...如何在單個hclust()中繪製cutree()集羣
- 8. 矩陣數學R大數據集
- 9. 如何在R中打印一個hclust對象的行?
- 10. 如何從R的hclust/heatmap.2獲得集羣成員
- 11. 如何讀取R中大數據集的子集?
- 12. R中的數據子集
- 13. R矢量化findInterval大型數據集
- 14. 通過SQL或R對大數據集進行高效分析?
- 15. 從R中的數據集中抽取大量指定行
- 16. 生成數據集R中
- 17. 集R中數據幀
- 18. 從數據集R中
- 19. R包中R掛着小數據集
- 20. R中的數據集文件大小,可能的開銷?
- 21. 從R中的hclust中提取文本中的樹結構
- 22. 將R中的大數據集保存到臨時表SQL數據庫中
- 23. ggplot2(r)中的大數據集和刻面
- 24. 如何有效地讀取R中的大型數據集?
- 25. 在R中使用非常大的數據集
- 26. 大型數據集問題(250MB)中的R加載
- 27. 如何使用環R中的大數據集
- 28. 以較少的時間在R中繪製大數據集
- 29. 我的大型數據集取代R中
- 30. 由於大數據集R中的PCoA錯誤
這裏最好的方法可能是使數據的子集彼此最接近(也許使用另一種聚類算法,如KNN),然後對這些子集進行分級聚類,然後最終分配每個聚類層次結構中的位置。 [這篇文章](http://stackoverflow.com/questions/9156961/hierarchical-clustering-of-1-million-objects)討論了這個基本思想。這篇文章的實現在[tag:python]中,但大部分只是討論想法,而不是代碼。 – Barker
此外,具有用於分級聚類algorythm即更高效看看['Rclusterpp'包(https://cran.r-project.org/web/packages/Rclusterpp/vignettes/Rclusterpp.pdf)。 – Barker
[在聚類大距離矩陣]的可能的複製(http://stackoverflow.com/questions/34281593/large-distance-matrix-in-clustering) – Barker