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:随着数据集增加的层次凝聚聚类性能的主要内容,如果未能解决你的问题,请参考以下文章
如何在 python Scikit-learn 中获得凝聚聚类“质心”