我试图实现中的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. R knn大型数据集
- 2. 用R表示大数据集中数据帧的子集
- 3. hclust()与cutree ...如何在单个hclust()中绘制cutree()集群
- 4. 如何读取R中大数据集的子集?
- 5. R矢量化findInterval大型数据集
- 6. 从数据集R中
- 7. R中的数据集文件大小,可能的开销?
- 8. 如何手动创建树状图(或“hclust”)对象? (in R)
- 9. 将R中的大数据集保存到临时表SQL数据库中
- 10. 大型数据集问题(250MB)中的R加载
- 11. 由于大数据集R中的PCoA错误
- 12. R:未使用的参数“标签”,在hclust
- 13. 根据符合条件的观测数目对R中的数据集进行子集设置。 [R]
- 14. 大数据集
- 15. 在R中绘制数据集的CDF?
- 16. R中的选择性数据集成
- 17. R中的缩放数据集
- 18. 向R中的数据集追加行
- 19. 阅读R中的复杂数据集
- 20. 合并R中的两个数据集
- 21. 引导中的R数据集
- 22. R中的一个数据帧子集
- 23. R - 在hclust中具有特定特征的孤立簇
- 24. 对R语言中的不同数据集重复操作
- 25. 功能不能对R中的数据集进行操作
- 26. R:数字级别并分配给新列,对于大数据集
- 27. 在R中观测数量不等的数据集的子集R
- 28. 在R数据集中找到比例数据集
- 29. Triplestore对于大型数据集
- 30. R - 如何按月对数据集进行子集划分?
这里最好的方法可能是使数据的子集彼此最接近(也许使用另一种聚类算法,如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