scikit-learn:数据集不断增长的层次聚集聚类性能

问题描述 投票:0回答:1

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秒

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

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

所以有两个问题。

  1. 无论输入数据集的大小如何增加,如何避免增加功能集的大小
  2. 是否有一种方法可以改善算法的性能而又不影响质量?
cluster-analysis hierarchical-clustering
1个回答
0
投票

标准AGNES层次聚类的复杂度为O(n³+n²d)。因此,实例的数量比功能的数量要严重得多。

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

© www.soinside.com 2019 - 2024. All rights reserved.