Ati*_*pal 20 python cluster-analysis machine-learning hierarchical-clustering data-mining
任何人都可以指向一个可以聚类约100万个对象的层次聚类工具(最好是在python中)吗?我试过hcluster,还有橘子.
hcluster18k物体有问题.Orange能够在几秒钟内聚集18k个对象,但失败了100k对象(饱和内存并最终崩溃).
我在Ubuntu 11.10上运行64位Xeon CPU(2.53GHz)和8GB RAM + 3GB交换.
Ano*_*sse 15
问题可能是他们会尝试计算完整的2D距离矩阵(大约8 GB,双精度),然后他们的算法O(n^3)无论如何都会及时运行.
您应该认真考虑使用不同的聚类算法.分层聚类很慢,结果通常都不令人信服.特别是对于数百万个物体,您不能只看树状图来选择合适的切割.
如果你真的想继续进行层次聚类,我相信ELKI(Java虽然)有一个O(n^2)实现SLINK.其中100万个物体应该快约100万倍.我不知道他们是否已经拥有CLINK.而且我不确定是否存在O(n^3)除单链路和完整链路之外的其他变体的子算法.
考虑使用其他算法.例如,k-means与对象的数量非常吻合(通常它们也不是很好,除非你的数据非常干净和规则).DBSCAN而OPTICS在我看来相当不错,一旦你有这些参数的感觉.如果您的数据集是低维的,那么使用适当的索引结构可以很好地加速它们.O(n log n)如果你有一个O(log n)查询时间的索引,那么它们应该运行.这可以为大型数据集带来巨大变化.我个人使用OPTICS的110k图像数据集没有问题,所以我可以想象它在你的系统上可以很好地扩展到100万.
den*_*nis 11
要击败O(n ^ 2),你必须首先将你的1M点数(文件)减少到例如每堆1000个点,或者每堆100个,或者......
两个可能的方法:
从15k点开始构建一个分层树,然后逐个添加其余的:time~1M*treedepth
首先构建100或1000个平面集群,然后构建100或1000个集群中心的分层树.
这些中的任何一个可能如何工作取决于目标树的大小和形状 - 多少层,多少叶?
您使用的是什么软件,以及您需要多少小时/天才能进行群集?
对于平面群集方法, K-d_tree在2d,3d,20d甚至128d的点上工作正常 - 不是你的情况.我几乎不知道聚类文本; 地方敏感的哈希?
看看scikit-learn群集 - 它有几种方法,包括DBSCAN.
补充:另请参阅
google-all-pairs-similarity-search
"用于在稀疏矢量数据中查找所有类似矢量对的算法",Beyardo等.2007
SO层次聚类 - 启发式
| 归档时间: |
|
| 查看次数: |
16602 次 |
| 最近记录: |