我一直在试着收集一些更大的数据集。由50000个尺寸为7的测量矢量组成。我正在尝试生成大约30到300个集群以供进一步处理。
我一直在尝试以下集群实现,但没有成功:
- Pycluster.kcluster(在我的数据集上只提供1-2个非空的集群)
- scipy.cluster.hierarchy.fclusterdata(运行时间过长)
- scipy.cluster.vq.kmeans(内存不足)
- sklearn.cluster.hierarchical.Ward(运行时间过长)
还有什么我可能遗漏的实现吗?
Tags:
因为您已经在尝试scikit学习:} 更好,但不会为您随机重新启动。
sklearn.cluster.KMeans
应该比Ward
更适合缩放,并且支持多核机器上的并行拟合。^{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很容易处理此问题:
我想知道你是否打算写50万个数据点,因为5万个数据点并不是那么多。如果是这样的话,milk需要更长的时间(大约700秒),但是仍然可以很好地处理它,因为它不会分配除数据和质心之外的任何内存。
相关问题 更多 >
编程相关推荐