首页 > 解决方案 > 不同数量的集群,无需每次都重新计算树

问题描述

我们在 python 中使用 sklearn 并尝试使用 full_tree 在一系列集群编号(即 N = 2-9)上运行凝聚聚类(Wards),而无需通过使用缓存为 N 的每个单独值重新计算树. 这在 2016 年的一篇旧帖子中得到了回答,但该答案似乎不再有效。请参阅(sklearn 凝聚聚类:动态更新聚类数量)。换句话说,在不同的 N 值上运行拟合,而不是每次都重新聚类。但是,我们遇到了语法错误,之后无法调用存储在缓存中的任何集群的标签。代码看起来像:

x = AgglomerativeClustering(memory="mycachedir", compute_full_tree=True

x.fit_predict(inputDF{2})不符合内存访问命令的语法有人知道在这种情况下从缓存中调用标签的语法吗?谢谢 PS我是新手,如果我不清楚,请提前道歉。

2016 年发布的尝试解决方案(sklearn 凝聚集群:动态更新集群数量)。

代码看起来像:

x = AgglomerativeClustering(memory="mycachedir", compute_full_tree=True

x.fit_predict(inputDF{2})不符合内存访问命令的语法

我们期望在给定的数组输入上运行聚类并检索每个集群的标签,当我们在一个范围内改变集群的数量“N”时,使用缓存而不是每次都重新计算树

标签: pythonscikit-learncluster-analysis

解决方案


sklearn API 非常适合这个。

使用 scipy 的凝聚聚类要好得多。因为它包含两个步骤:构建链接/树状图,然后从中提取平面聚类。第一步是使用 Ward 的 O(n³),但我认为第二步只有 O(n)。在 ELKI 中也可以找到类似的方法。但不幸的是,sklearn 遵循这种源自分类的狭隘“拟合预测”视图,并且不支持这种两步法。

如果我没记错的话,scipy 中还有其他功能,但 sklearn 中没有。看看吧。


推荐阅读