从不同级别的层次聚类中获取标签

问题描述 投票:1回答:1

我正在努力实现集群自适应学习,正如paper所提出的那样。为了实现层次聚类,我使用了以下内容:

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

如果这是为了创建这样的树状图:

dendogram(来自上述论文)

然后我可以使用以下行:

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

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

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

python machine-learning scipy hierarchical-clustering
1个回答
0
投票

使用

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
© www.soinside.com 2019 - 2024. All rights reserved.