首页 > 解决方案 > DBSCAN sklearn 很慢

问题描述

我正在尝试对具有超过 100 万个数据点的数据集进行聚类。一列有文本,另一列有与之对应的数值。我面临的问题是它被卡住并且永远不会完成。我尝试使用大约 100,000 个较小的数据集,它运行得相当快,但是随着我开始增加数据点,它开始变慢,并且对于一百万它永远不会完成并挂起。最初,我认为这可能是因为我有一个用于文本的 tfidf 矩阵,并且有 100 个维度,所以需要很长时间。然后我尝试根据每个数据点的单个值的数量进行聚类,但仍然没有完成。下面是代码片段。知道我可能做错了什么吗?我见过人们使用更大的数据集并且没有问题。

Y=data['amount'].values
Y=Y.reshape(-1,1)
dbscan = DBSCAN(eps=0.3, min_samples= 10, algorithm='kd_tree')
dbscan.fit_predict(Y)
labels = dbscan.labels_
print(labels.size)
clusters = labels.tolist()
#printing the value and its label
for a, b in zip(labels, Y):
    print(a, b)

标签: pythonmachine-learningscikit-learncluster-analysisdbscan

解决方案


很可能您的 epsilon 太大。

如果大多数点在大多数其他点的 epsilon 内,则运行时间将是二次 O(n²)。所以从小的值开始!

您不能只添加/删除功能并保持 epsilon 不变。


推荐阅读