【问题标题】:Get labels from different levels of hierarchical clustering从不同层次的层次聚类中获取标签
【发布时间】:2018-06-04 16:11:15
【问题描述】:

我正在实施集群自适应学习,正如paper 中所建议的那样。为了实现层次聚类,我使用了以下方法:

X = sp.hstack((title, abstract), format='csr')
Z = ward(X.todense())

如果要创建这样的树状图:

(来自上述论文)

然后我可以使用以下行:

clusters = fcluster(Z, k=2, criterion='maxclust')

获取每个X 所属的类(即图中的 2 或 3),表示为 0 或 1。

如何拆分组,以便从多个级别为每个 X 获取标签。例如,如何从 2、4 和 9 或 3 中获取每个 X 所属的类的列表, 5 和 6。

【问题讨论】:

  • 你有什么问题?
  • @user1767754 请参见粗体部分。问题还不清楚吗?

标签: python machine-learning scipy hierarchical-clustering


【解决方案1】:

使用

fcluster(Z, height, criterion='distance')

其中 level 是一个整数 (0, 1, 2, ... ),它指示平面集群中允许的 cophenetic distance

两个对象之间的共同距离是树状图的高度,其中包含两个对象的两个分支合并为一个分支

这意味着:

  • height = 0 什么都不做,你得到单点簇,每个原始值一个。没那么有用。
  • height = 1 执行一级合并,即原始条目之间的合并
  • height = 2 执行二级合并,即一级集群之间的合并。

我在 10 个元素上生成了一些链接 Z 并运行

[fcluster(Z, height, criterion='distance') for height in range(5)]

为了说明这一点:

  [10,5, 3, 1, 6, 4, 7, 8, 9, 2]   <- level 0, everyone separate
  [6, 3, 2, 1, 3, 2, 4, 4, 5, 1]   <- 6 clusters
  [4, 3, 2, 1, 3, 2, 3, 3, 3, 1]   <- 4 clusters
  [3, 3, 2, 1, 3, 2, 3, 3, 3, 1]   <- 3 clusters
  [2, 2, 2, 1, 2, 2, 2, 2, 2, 1]   <- 2 clusters

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-08
    • 2018-10-04
    • 2014-06-28
    • 2019-09-27
    • 2012-03-10
    • 2015-08-12
    • 2015-04-24
    相关资源
    最近更新 更多