我们在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”的数量时检索每个聚类的标签
答案 0 :(得分:0)
sklearn API非常不适合此。
最好使用scipy的聚集聚类。因为它由两个步骤组成:构建链接/树状图,然后从中提取平面聚类。第一步是使用Ward的O(n³),但我认为第二步只是O(n)。在ELKI中也可以找到类似的方法。但是不幸的是,sklearn遵循了源自分类的狭narrow“适合预测”观点,并且不支持这种两步走法。
如果我没记错的话,scipy中还有其他功能可用,但是sklearn中没有。看看吧。