集群大量数据

问题描述 投票:-1回答:1

我需要聚类约200万个数据点,该数据帧包含纬度,经度和另一个变量。我尝试过k均值效果不佳。我也尝试了DBSCAN和MeanShift,但是使用DBSCAN时出现内存错误,MeanShift大约需要3天。你们知道有什么方法或技术可以使这种方法更有效吗?

谢谢!

bigdata cluster-computing cluster-analysis dbscan
1个回答
0
投票

DBSCAN应该占用linear内存。那就足够了。

也许您只需要选择一个更好的实现或参数。

sklearn文档讨论了他们的问题:

此实现批量计算所有邻居查询,这将内存复杂度提高到O(n.d),其中d是邻居的平均数量,而原始DBSCAN的内存复杂度为O(n)。在查询这些最近邻域时,它可能会吸引更高的内存复杂度,具体取决于算法。

避免查询复杂性的一种方法是使用NearestNeighbors.radius_neighbors_graph以mode ='distance'预先计算块中的稀疏邻域,然后在此处使用metric ='precomputed'。

减少内存和计算时间的另一种方法是删除(近)重复的点并改用sample_weight。

现在,第一个解决方法甚至是错误。如果平均存在d个邻居,则实现radius_neighbors_graph的条目也将为O(n.d)。所以这再好不过了...

DBSCAN的教科书实现仅需要O(n)内存。因此,对于大型数据集,sklearn不是一个好选择。

© www.soinside.com 2019 - 2024. All rights reserved.