每次更改簇数而无需重新计算树

时间:2019-09-16 11:37:15

标签: python scikit-learn cluster-analysis

我们在python中使用sklearn,并尝试使用full_tree在一定范围的簇数(即N = 2-9)上运行聚集聚类(Wards),而不必为N的每个单独值重新计算树,方法是使用缓存。在2016年的一篇旧帖子中对此进行了回答,但该答案似乎不再起作用。请参阅(sklearn agglomerative clustering: dynamically updating the number of clusters)。  换句话说,对N的不同值进行拟合,而不必每次都重新聚类。但是,我们遇到语法错误,因此以后无法调用存储在缓存中的任何群集的标签。代码类似于:

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

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

尝试过的解决方案于2016年发布(sklearn agglomerative clustering: dynamically updating the number of clusters)。

代码类似于:

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

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

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

1 个答案:

答案 0 :(得分:0)

sklearn API非常不适合此。

最好使用scipy的聚集聚类。因为它由两个步骤组成:构建链接/树状图,然后从中提取平面聚类。第一步是使用Ward的O(n³),但我认为第二步只是O(n)。在ELKI中也可以找到类似的方法。但是不幸的是,sklearn遵循了源自分类的狭narrow“适合预测”观点,并且不支持这种两步走法。

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