如何在python中将树形图转换为树对象?

时间:2018-06-01 16:09:01

标签: python scipy hierarchical-clustering dendrogram

我正在尝试使用scipy.hierarchy.cluster模块对某些文本进行分层聚类。我做了以下事情:

l = linkage(model.wv.syn0, method='complete', metric='cosine')

den = dendrogram(
l,
leaf_rotation=0.,  
leaf_font_size=16.,  
orientation='left',
leaf_label_func=lambda v: str(model.wv.index2word[v])

树形图函数返回一个包含树表示的字典:

den['ivl']是与树叶对应的标签列表:

['politics', 'protest', 'characterfirstvo', 'machine', 'writing', 'learning', 'healthcare', 'climate', 'of', 'rights', 'activism', 'resistance', 'apk', 'week', 'challenge', 'water', 'obamacare', 'colorado', 'change', 'voiceovers', '52', 'acting', 'android']

den['leaves']是从左到右遍历树叶的每个叶子的位置列表:
[0, 18, 5, 6, 2, 7, 12, 16, 21, 20, 22, 3, 10, 14, 15, 19, 11, 1, 17, 4, 13, 8, 9]

我知道scipy的to_tree()方法通过返回对根节点(ClusterNode对象)的引用将链接矩阵表示的层次聚类转换为树对象 - 但是我不确定这个根节点是怎么做的对应我的叶子/标签。例如,在这种情况下,get_id()方法返回的ID为root = 44, left = 41, right = 43

rootnode, nodelist = to_tree(l, rd=True)
rootID = rootnode.get_id()
leftID = rootnode.get_left().get_id()
rightID = rootnode.get_right().get_id()

我的问题基本上是,如何遍历此树并获取den['leaves']中的相应位置并在den['ivl']中为每个ClusterNode标记?

提前感谢您的帮助!

作为参考,这是连锁矩阵l:

[[20.         22.          0.72081252  2.        ]
[12.         16.          0.78620636  2.        ]
[ 3.         10.          0.79635815  2.        ]
[ 0.         18.          0.80193474  2.        ]
[15.         19.          0.82297097  2.        ]
[ 2.          7.          0.84152483  2.        ]
[ 1.         17.          0.84453892  2.        ]
[ 4.         13.          0.86098654  2.        ]
[ 8.          9.          0.88163748  2.        ]
[14.         27.          0.91252009  3.        ]
[11.         29.          0.92034739  3.        ]
[21.         23.          0.92406542  3.        ]
[ 5.          6.          0.93213108  2.        ]
[25.         32.          0.98555722  5.        ]
[26.         35.          0.99214198  4.        ]
[30.         31.          1.05624908  4.        ]
[24.         34.          1.0606247   5.        ]
[28.         39.          1.06322889  7.        ]
[37.         40.          1.1455562  11.        ]
[33.         38.          1.15171714  7.        ]
[36.         42.          1.17330334 12.        ]
[41.         43.          1.25056073 23.        ]]

0 个答案:

没有答案