如何根据集群之间的距离阈值来决定集群的数量,以便使用 sklearn 进行凝聚聚类?

Posted

技术标签:

【中文标题】如何根据集群之间的距离阈值来决定集群的数量,以便使用 sklearn 进行凝聚聚类?【英文标题】:How to decide the numbers of clusters based on a distance threshold between clusters for agglomerative clustering with sklearn? 【发布时间】:2019-01-27 01:06:21 【问题描述】:

使用sklearn 中的sklearn.cluster.AgglomerativeClustering,我需要提前指定生成的集群的数量。我想做的是合并集群,直到达到集群之间的某个最大距离,然后停止集群过程。

因此,聚类的数量可能会因数据结构而异。我也不关心生成的集群的数量或集群的大小,只关心集群质心不超过一定距离。

我怎样才能做到这一点?

【问题讨论】:

【参考方案1】:

直接使用 scipy 而不是 sklearn。恕我直言,它好多了。

层次聚类是一个三步过程:

    计算树状图 可视化和分析 提取分支

但这不符合 sklearn 的面向监督学习的 API 偏好,它希望一切都实现 fitpredict API...

SciPy 为您提供了一个功能:

https://docs.scipy.org/doc/scipy/reference/generated/scipy.cluster.hierarchy.fcluster.html#scipy.cluster.hierarchy.fcluster

【讨论】:

【参考方案2】:

对于 scikit-learn 的凝聚聚类中的 distance_threshold 参数的拉取请求可能很有趣: https://github.com/scikit-learn/scikit-learn/pull/9069

看起来它会在 0.22 版本中合并。

编辑:请参阅my answer to my own question,了解使用 scipy 使用基于距离的停止标准实现单链接聚类的示例。

【讨论】:

以上是关于如何根据集群之间的距离阈值来决定集群的数量,以便使用 sklearn 进行凝聚聚类?的主要内容,如果未能解决你的问题,请参考以下文章

如何决定kafka集群中话题的分区的数量

聚类算法的编程结构

kmeans集群中节点和质心之间的距离?

我如何在这个数组中获取数据,如果条件使它成为python中距离最小的集群?

自定义聚类算法

关联传播首选项初始化