【问题标题】:Can't extract clusters from fcluster after using scipy's hierarchichal clustering使用 scipy 的层次聚类后无法从 fcluster 中提取聚类
【发布时间】:2018-08-17 05:36:02
【问题描述】:

在对我的数据集进行层次聚类并使用 dendrogram 函数对其进行绘制之后,它似乎是正确的聚类,但是当我调用函数 fcluster 来提取集群 id 时,我只会得到一个集群 id。 为什么会这样?

我的代码:

    for key, values in use_case_idx.items():
        vectors = []
        labels = []
        for value in values:
            labels.append(value[0])
            vectors.append(value[1])

        try:
            distance_matrix = pdist(vectors, metric='cosine')
            Z = linkage(distance_matrix, 'ward')
            plt.title("Ward")
            dendrogram(Z, labels=labels)
        except:
            continue

        plt.show()

        clusters = fcluster(Z, 10, criterion='distance')
        print(clusters)

因此,输出:

更多示例:https://imgur.com/a/kEfub

这段代码有什么问题?

注意:每个向量有 50 个维度

【问题讨论】:

  • 不要只使用像10 这样的值。你需要选择这个参数。
  • 我没有。我只是错了它的意图。我认为这是最大集群的限制。
  • 查看fcluster文档,含义取决于你选择的criterion

标签: numpy machine-learning scipy cluster-analysis hierarchical-clustering


【解决方案1】:

树状图的 y 轴显示不同节点之间的cophenetic distance。因为您使用的 distance 标准具有较大的值(远大于共生距离),所以所有元素都被分组到同一个簇中。

尝试使用较小的阈值(例如,您显示的第一个树状图为 0.025)。树状图可以作为选择“好”阈值的指南——尽管“好”是非常主观的。

【讨论】:

  • 谢谢。我认为来自 fcluster 的参数 t 只是对最大集群数量的控制。我认为文档不是很清楚。澄清一下,您建议更改的参数是来自 fcluster 的“t”,对吧?
【解决方案2】:

如果您想将数据聚集到 n 个不同的集群中,您可以使用标准“maxclust”来执行此操作,例如 fcluster(data,n,criterion = 'maxclust')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 2012-03-10
    • 2019-10-24
    • 2019-04-27
    • 2021-01-15
    • 2021-07-02
    • 2013-07-11
    相关资源
    最近更新 更多