scikit-learn:随着数据集增加的层次凝聚聚类性能

Posted

技术标签:

【中文标题】scikit-learn:随着数据集增加的层次凝聚聚类性能【英文标题】:scikit-learn: Hierarchal Agglomerative Clustering performance with increasing dataset 【发布时间】: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】:

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

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

【讨论】:

以上是关于scikit-learn:随着数据集增加的层次凝聚聚类性能的主要内容,如果未能解决你的问题,请参考以下文章

Scikit-learn 凝聚聚类连接矩阵

使用 scikit 选择层次凝聚聚类中的聚类数

如何在 python Scikit-learn 中获得凝聚聚类“质心”

拐点处选择聚类K值

如何在 Scikit-learn 凝聚聚类中使用 Pearson 相关性作为距离度量

随着时间的推移更新 NaiveBayes 分类器(在 scikit-learn 中)