可能使用python绑定的大规模集群库

2024-05-23 19:19:42 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在试着收集一些更大的数据集。由50000个尺寸为7的测量矢量组成。我正在尝试生成大约30到300个集群以供进一步处理。

我一直在尝试以下集群实现,但没有成功:

  • Pycluster.kcluster(在我的数据集上只提供1-2个非空的集群)
  • scipy.cluster.hierarchy.fclusterdata(运行时间过长)
  • scipy.cluster.vq.kmeans(内存不足)
  • sklearn.cluster.hierarchical.Ward(运行时间过长)

还有什么我可能遗漏的实现吗?


Tags: 数据hierarchy尺寸矢量时间集群scipy集上
3条回答

因为您已经在尝试scikit学习:sklearn.cluster.KMeans应该比Ward更适合缩放,并且支持多核机器上的并行拟合。^{}更好,但不会为您随机重新启动。

>>> from sklearn.cluster import MiniBatchKMeans
>>> X = np.random.randn(50000, 7)
>>> %timeit MiniBatchKMeans(30).fit(X)
1 loops, best of 3: 114 ms per loop

50000个实例和7个维度并不是很大,不应该杀死一个实现。

尽管它没有python绑定,但是请尝试ELKI。他们在主页上使用的基准集是8维的110250个实例,他们显然在60秒内运行k-means,在350秒内运行更先进的光学系统。

避免分层群集。它实际上只适用于小数据集。它通常在矩阵运算上实现的方式是O(n^3),这对于大型数据集来说是非常糟糕的。所以我并不惊讶这两个为你超时。

使用索引支持实现时,DBSCAN和OPTICS是O(n log n)。当天真地实现时,它们在O(n^2)中。K-means确实很快,但通常结果并不令人满意(因为它总是在中间分裂)。它应该在O(n * k * iter)中运行,通常在不太多的迭代(iter<<100)中收敛。但它只适用于欧几里德距离,而不适用于某些数据(高维、离散、二进制、不同大小的簇…)

我的包milk很容易处理此问题:

import milk
import numpy as np
data = np.random.rand(50000,7)
%timeit milk.kmeans(data, 300)
1 loops, best of 3: 14.3 s per loop

我想知道你是否打算写50万个数据点,因为5万个数据点并不是那么多。如果是这样的话,milk需要更长的时间(大约700秒),但是仍然可以很好地处理它,因为它不会分配除数据和质心之外的任何内存。

相关问题 更多 >