DBSCAN 处理大数据崩溃和内存错误 [重复]

Posted

技术标签:

【中文标题】DBSCAN 处理大数据崩溃和内存错误 [重复]【英文标题】:DBSCAN handling big data crashes and memory error [duplicate] 【发布时间】:2017-10-23 04:56:44 【问题描述】:

我正在对 400K 数据点的数据集进行 DBSCAN。这是我得到的错误:

Traceback (most recent call last):
  File "/myproject/DBSCAN_section.py", line 498, in perform_dbscan_on_data
    db = DBSCAN(eps=2, min_samples=5).fit(data)
  File "/usr/local/Python/2.7.13/lib/python2.7/site-packages/sklearn/cluster/dbscan_.py", line 266, in fit
    **self.get_params())
  File "/usr/local/Python/2.7.13/lib/python2.7/site-packages/sklearn/cluster/dbscan_.py", line 138, in dbscan
    return_distance=False)
  File "/usr/local/Python/2.7.13/lib/python2.7/site-packages/sklearn/neighbors/base.py", line 621, in radius_neighbors
    return_distance=return_distance)
  File "sklearn/neighbors/binary_tree.pxi", line 1491, in sklearn.neighbors.kd_tree.BinaryTree.query_radius (sklearn/neighbors/kd_tree.c:13013)
MemoryError

我该如何解决这个问题? DBSCAN 处理大量数据是否有任何限制?

我的示例来源来自:http://scikit-learn.org/stable/modules/generated/sklearn.cluster.DBSCAN.html

我的数据是 X、Y 坐标格式:

11.342276,11.163416
11.050597,10.745579
10.798838,10.559784
11.249279,11.445535
11.385767,10.989214
10.825875,10.530120
10.598493,11.236947
10.571042,10.830799
11.454966,11.295484
11.431454,11.200208
10.774908,11.102601
10.602692,11.395169
11.324441,11.088243
10.731538,10.695864
10.537385,10.923226
11.215886,11.391537

我应该将我的数据转换为稀疏 CSR 吗?如何?

【问题讨论】:

您不能以 5-10-25% 的速率对数据进行采样,以便更轻松地将其放入内存中吗?另外,我很惊讶 800k 浮点数让你的内存用完了,你有多少内存?! @Henry 我的 RAM 大约是 64GB !!!采样是什么意思?我应该一个一个地考虑我所有的数据点......我不能排除任何一个。 例如,您可以获取 10% 的数据点,将它们聚类以生成您的质心,然后查看这些质心如何适合您的完整数据集? 并非如此。我不熟悉数据集,例如,不熟悉 DBScan 技术。但是您可以随机抽取 10% 的输入数据集,像现在一样在其上运行 DBScan,然后获取生成的质心?来自 DBScan,并将其与剩余 90% 的数据集进行比较,看看那里的距离与样本中的距离相比如何 @Henry DBSCAN 不使用质心。 【参考方案1】:

sklearn 的 DBSCAN 需要 O(n*k) 内存,其中 k 是 epsilon 内的邻居数。对于大型数据集和 epsilon,这将是一个问题。 对于小型数据集,它在 Python 上更快,因为它在 Cython 中完成了更多工作,而不是慢速解释器。 sklearn 作者选择了这种变体。 现在,也考虑使用更小的 epsilon。

但这不是最初的 DBSCAN 提议的,其他实现(例如 ELKI)已知可以扩展到数百万个点。它一次查询一个点,因此它只需要 O(n+k) 内存。 它还具有 OPTICS,据报道它在坐标上工作得很好。

【讨论】:

非常感谢,你能分享一些和你说的一样的库或包吗?一些例子?请 我做到了。但它不是 Python。 @Anony-Mousse 您的回答对文本聚类的主题很有帮助,您是否可以为大家创建一个关于如何使用 ELKI 的简短教程? 我太注重细节了。我的教程很烂,我的教学很烂。初学者更擅长编写教程(您仍然可以获得反馈!),因为他们更了解初学者的需求。

以上是关于DBSCAN 处理大数据崩溃和内存错误 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

DBSCAN 集群甚至无法处理 40k 数据,但使用 python 和 sklearn 处理 10k 数据

Pig 无法处理大文件

在 R 中处理大数据的有效方法

以块的形式处理比物理内存大得多的数据

Python,内存错误,csv文件太大[重复]

在大型 .csv 文件上应用 DBSCAN 会导致磁盘使用量超过 100% 并挂起我的电脑 [重复]