在python中聚类巨大的数据矩阵?

Posted

技术标签:

【中文标题】在python中聚类巨大的数据矩阵?【英文标题】:Clustering huge data matrix in python? 【发布时间】:2014-02-03 21:31:12 【问题描述】:

我想对 150 万种化合物进行聚类。这意味着有 1.5 x 150 万的距离矩阵...

我想我可以使用 pyTables 生成这么大的表,但现在 - 有了这样的表,我将如何对它进行聚类?

我想我不能只将 pyTables 对象传递给 scikit learn 聚类方法之一...

是否有任何基于 python 的框架可以占用我的大表并用它做一些有用的事情(谎言聚类)?也许以分布式方式?

【问题讨论】:

为什么一定要python?对于这种大小的数据,解决它的自然方法是通过专用软件在一个独立的过程中解决它。通常,这样的矩阵要么非常稀疏,要么通过应用一些权重阈值很容易被认为是稀疏的。在这种情况下,它也可以被认为是一个图聚类问题。 因为这是我问的问题。如果你不知道答案,你为什么要评论? 我碰巧知道一点关于集群的知识,如果你为大规模数据挖掘问题而沉迷于一种特定的软件语言,这似乎很奇怪。您是想解决问题还是只是喜欢刻薄?这是一个真正的问题——为什么它必须是 python? 它不一定是 python,但如果我的环境几乎都是基于 python 的,那就太好了。我不喜欢说 python 不适合处理大量数据,因为它不是真的,pytables 是最好的例子。它需要基于开源软件,需要在标准的无头 linux 机器上完成。而你只是说python不好(因为它是python还是什么?)但你没有说什么是好的解决方案。 【参考方案1】:

也许你应该看看不需要完整距离矩阵的算法

我知道将算法表述为矩阵运算很流行,因为诸如 R 之类的工具在矩阵运算方面相当快(而在其他方面却很慢)。但是有很多方法不需要O(n^2) 内存...

【讨论】:

为了使这个答案具有建设性 - 你能举一些这种方法的例子吗? 我将添加 RNSC、Louvain 方法和 MCL。 Mean Shift, SLINK, CLINK, GMM-EM, Canopy preclustering, ...实际上我相信大多数聚类算法不是基于距离矩阵的。 从概念上讲,我想说的大多数(全部?)算法中都有距离或相似度矩阵,但没有必要跟踪所有这些。可以进行一次性的全部与全部计算并存储稀疏表示,或者构建某种索引。【参考方案2】:

我认为主要问题是内存。 1.5 x 1.5 百万 x 10B(1 个元素大小)> 20TB 您可以使用 pyTables、Hadoop http://en.wikipedia.org/wiki/Apache_Hadoop 和 MapReduce 算法等大数据数据库。

这里有一些指南:http://strata.oreilly.com/2013/03/python-data-tools-just-keep-getting-better.html

或者使用带有 MapReduce 的 Google App Engine Datastore https://developers.google.com/appengine/docs/python/dataprocessing/ - 但现在它不是生产版本

【讨论】:

以上是关于在python中聚类巨大的数据矩阵?的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn 中聚类的混淆矩阵

在R中聚类非常大的数据集

在 MySQL 数据库中聚类经纬度数据

常见的5中聚类算法

在mongodb中聚类地理数据

5中聚类方法介绍