我正在使用层次聚类来对词向量进行聚类,并且我希望用户能够显示显示聚类的树状图。然而,由于可能有数千个单词,我希望这个树状图被截断为一些合理的有价值的,每个叶子的标签是该簇中最重要的单词的字符串。
我的问题是,根据文档 http://students.mimuw.edu.pl/~pbechler/scipy_doc/generated/scipy.cluster.hierarchy.dendrogram.html, “只有当 labels[i] 值对应于原始观察值而不是非单例簇时,才是放置在第 i 个叶节点下的文本。”我认为这意味着我不能标记簇,只能标记奇异点?
为了说明这一点,这里有一个简短的 python 脚本,它生成一个简单的标记树状图:
import numpy as np
from scipy.cluster.hierarchy import dendrogram, linkage
from matplotlib import pyplot as plt
randomMatrix = np.random.uniform(-10,10,size=(20,3))
linked = linkage(randomMatrix, 'ward')
labelList = ["foo" for i in range(0, 20)]
plt.figure(figsize=(15, 12))
dendrogram(
linked,
orientation='right',
labels=labelList,
distance_sort='descending',
show_leaf_counts=False
)
plt.show()
现在假设我想截断为仅 5 个叶子,并且对于每个叶子,将其标记为“foo,foo,foo ...”,即组成该簇的单词。 (注意:生成这些标签不是这里的问题。)我截断它,并提供一个标签列表来匹配:
labelList = ["foo, foo, foo..." for i in range(0, 5)]
dendrogram(
linked,
orientation='right',
p=5,
truncate_mode='lastp',
labels=labelList,
distance_sort='descending',
show_leaf_counts=False
)
问题是,没有标签:
我认为参数“leaf_label_func”可能在这里有用,但我不确定如何使用它。