【发布时间】:2017-01-11 12:46:03
【问题描述】:
树状图是一种与层次聚类算法一起使用的数据结构,它在树的不同“高度”处对聚类进行分组 - 其中高度对应于聚类之间的距离度量。
从某些输入数据集创建树状图后,通常更难确定在哪里“切割”树状图,这意味着选择一个高度,使得只有低于该高度的聚类才被认为是有意义的。
在什么高度切割树状图并不总是很清楚,但存在一些算法,例如 DynamicTreeCut 算法,它们试图以编程方式从树状图中选择有意义的集群。
见:
https://stats.stackexchange.com/questions/3685/where-to-cut-a-dendrogram
Cutting dendrogram at highest level of purity
所以我一直在阅读 DynamicTreeCut 算法,以及该算法的 Java implementation。我了解算法是如何工作的以及它在做什么,就逐步分解正在发生的事情而言。但是,我无法理解 这个算法是如何做任何有意义的事情的。我想我在这里遗漏了一些关键概念。
一般来说,该算法从树状图中迭代“高度序列”。我不确定,但我假设“高度序列”仅表示树状图 Y 轴上的值,即集群连接发生的各种高度。如果是这种情况,我们可以假设“身高序列”按升序排序。
然后该算法要求获取“参考高度”l,并从输入“高度序列”中的每个高度中减去它。这为您提供了高度序列中每个高度 h[i] 与参考高度 l 之间的差异向量 (D)。
然后算法会尝试找到“过渡点”——它们是差异向量中D[i] > 0 和D[i+1] < 0 的点。换句话说,差值向量中的点,差值从正变为负。
而就在这里,我完全迷失了。我不明白这些过渡点如何有意义。首先,据我了解,输入高度序列H 只是树状图 Y 轴上的值。因此,高度序列H 应该是升序。因此,我们从 positive 过渡到 negative 的差异向量中怎么会有一个点?
例如:
假设我们的输入高度序列 H 是{1, 1.5, 2, 2.5, 3, 7, 9},我们的参考值l 是平均高度(即3.7)。因此,如果我们通过从H 中的每个高度减去l 来创建差异向量D,我们将得到{-2.7, -2.2, -1.7, -1.2, -0.7, 3.3, 5.3}。很明显,这里没有过渡点,也不可能有,因为在D[i] > 0 和D[i+1] < 0 的差异向量中没有点,因为高度序列H 是升序.
很明显,我完全误解了这个算法的基本原理。也许我不明白“高度序列”是什么意思。我假设它只是树状图中 Y 轴上的值,但显然这对于算法实际在做什么没有任何意义。不幸的是,作者并没有真正解释“树状图高度序列”的含义,它似乎也不是数据科学界使用的某种标准术语。
那么能否解释一下 DynamicTreeCut 算法在这里试图实现什么,以及我的理解哪里出了问题?
【问题讨论】:
-
你的困惑是对的。唯一有意义的解释是“树状图高度序列”具有作者从未设法提及的非常规含义。实现注释中有一条可能的线索,它说它是“从根到节点的相异度量之和”bioinformatics.org/cgi-bin/viewvc.cgi/catch/branches/…
标签: algorithm cluster-analysis hierarchical-clustering dendrogram unsupervised-learning