DBSCAN需要很长时间来聚类数据集

时间:2018-09-28 18:08:28

标签: python machine-learning scikit-learn cluster-analysis dbscan

我正在尝试对具有超过一百万个数据点的数据集进行聚类。一列具有文本,另一列具有与之对应的数值。我面临的问题是它卡住了并且永远无法完成。我曾尝试使用约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)

2 个答案:

答案 0 :(得分:0)

您的epsilon可能太大了。

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

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

答案 1 :(得分:-1)

使用更多核心。

使用n_jobs参数。将其定义为:n_jobs=-1类内的DBSCAN

示例:

Y=data['amount'].values
Y=Y.reshape(-1,1)
dbscan = DBSCAN(eps=0.3, min_samples= 10, algorithm='kd_tree', n_jobs=-1)
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)