【问题标题】:varying number of clusters without recalculating tree every time不同数量的集群,无需每次都重新计算树
【发布时间】:2020-01-17 05:48:35
【问题描述】:

我们在 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”时,使用缓存而不是每次都重新计算树

【问题讨论】:

    标签: python scikit-learn cluster-analysis


    【解决方案1】:

    sklearn API 非常适合这种情况。

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

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

    【讨论】:

    • Scipy 看起来是一个有趣的解决方案。我们来看看。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-11-21
    • 2017-08-10
    • 2016-06-07
    • 2018-05-29
    • 2017-07-10
    • 2016-08-02
    • 1970-01-01
    相关资源
    最近更新 更多