代码之家  ›  专栏  ›  技术社区  ›  Anshul Tripathi

DBS可能需要很长时间才能对数据集进行聚类

  •  0
  • Anshul Tripathi  · 技术社区  · 6 年前

    我正在尝试对一个拥有100多万个数据点的数据集进行聚类。一列有文本,另一列有与其对应的数值。我面临的问题是,它被卡住了,永远不会完成。我曾尝试使用大约10万个较小的数据集,它工作得相当快,但随着我开始增加数据点,它开始变慢,对于100万个数据集来说,它永远不会完成并挂起。起初,我认为这可能是因为我有一个文本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 回复  |  直到 5 年前
        1
  •  2
  •   Has QUIT--Anony-Mousse    6 年前

    很可能你的ε太大了。

    如果大多数点在其他大多数点的ε范围内,那么运行时间将是二次O(n²)。所以从 小的 价值观

    你不能只添加/删除特性而保持epsilon不变。

        2
  •  1
  •   seralouk    5 年前

    使用更多内核。

    使用 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)