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

时间:2017-12-21 23:38:38

标签: python machine-learning scipy hierarchical-clustering

我正在努力实现集群自适应学习,正如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中获取每个X所属的类的列表, 5和6。

1 个答案:

答案 0 :(得分: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