【问题标题】:scikit-learn: Hierarchal Agglomerative Clustering performance with increasing datasetscikit-learn:随着数据集增加的层次凝聚聚类性能
【发布时间】:2020-03-21 00:56:30
【问题描述】:

scikit-learn==0.21.2

随着数据集的增加,层次凝聚聚类算法的响应时间呈指数增长。

我的数据集是文本的。每个文档的长度为 7-10 个字。

使用以下代码执行聚类。

hac_model = AgglomerativeClustering(affinity=consine,
                                            linkage=complete,
                                            compute_full_tree=True,
                                            connectivity=None, memory=None,
                                            n_clusters=None,
                                            distance_threshold=0.7)
cluster_matrix = hac_model.fit_predict(matrix)

大小矩阵在哪里:

  • 5000x1500 耗时 17 秒
  • 10000*2000 耗时 113 秒
  • 13000*2418 耗时 228 秒

我无法控制 5000、10000、15000,因为这是输入的大小或特征集大小(即 1500、2000、2418),因为我使用的是 BOW 模型(TFIDF)。

我最终使用所有唯一词(删除停用词后)作为我的功能列表。此列表随着输入大小的增加而增加。

所以有两个问题。

  1. 如何避免增加特征集大小而不管输入数据集大小的增加
  2. 有没有一种方法可以在不影响质量的情况下提高算法的性能?

【问题讨论】:

    标签: cluster-analysis hierarchical-clustering


    【解决方案1】:

    标准 AGNES 层次聚类的复杂度为 O(n³+n²d)。所以实例的数量比特征的数量更成问题。

    有些方法通常在 O(n²d) 中运行,尽管最坏的情况保持不变,因此它们会比这快得多。有了这些,您通常首先会遇到内存限制......不幸的是,据我所知,这并没有在 sklearn 中实现,因此您必须使用其他聚类工具 - 或自己编写算法。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-20
      • 2017-08-06
      • 2014-06-28
      • 2021-09-16
      • 2016-09-06
      • 2021-10-04
      • 2017-06-09
      • 2021-07-21
      相关资源
      最近更新 更多