繁体   English   中英

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

[英]DBSCAN clustering is not working even on 40k data but working on 10k data using python and sklearn

我正在尝试对我的数据集进行聚类。 我的数据集中有 700k 行。 我从中取出 40k 并尝试在 python 和 sklearn 中进行 DBSCAN 集群。 我在 32 GB 内存上运行。 该算法运行了一整夜,但没有完成,然后我手动停止了程序。

但是当我尝试使用 10k 数据集时,它正在运行。

在数据集大小的情况下,DBSCAN 是否有任何限制?

我使用了以下代码:

clustering = DBSCAN().fit(df)
pred_y = clustering.labels_

以及以下版本:

clustering = DBSCAN(eps=9.7, min_samples=2, algorithm='ball_tree', metric='minkowski', leaf_size=90, p=2).fit(df)
pred_y = clustering.labels_

如何在我的数据集中使用 DBSCAN 聚类?

[更新]

我们在这里谈论多少列? 根据我使用 DBSCAN 的经验,列数对性能的影响大于行数。 我倾向于在将数据拟合到 DBSCAN 之前使用 PCA 来降低维度——这显着加快了聚类过程。

根据您提供的其他信息,我做了一个简单的复制(警告:使用当前参数,它将运行很长时间):

import numpy as np

data_1k = np.random.random((1000, 4))
data_5k = np.random.random((5000, 4))
data_10k = np.random.random((10000, 4))
data_40k = np.random.random((40000, 4))

from sklearn.cluster import DBSCAN

clustering = DBSCAN(eps=9.7, min_samples=2, algorithm='ball_tree', metric='minkowski', leaf_size=90, p=2).fit(data_40k)
np.unique(clustering.labels_)

对于 10k 数据集,上述代码将在几秒钟内执行,但对于 40k 数据集,它将处理它很长时间,这是由于eps参数的值非常高造成的。 您绝对确定它是您数据的“正确”值吗?
对于我上面提供的示例,只需降低eps值(例如降低到0.08 )即可将过程加速到大约 3 秒。

如果eps=9.7确实是您的数据所需的值,我会考虑使用一些缩放器或可能有助于缩小值范围的东西? (并降低eps值)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM