树状图是一种与分层聚类算法一起使用的数据结构,它将聚类分组到不同的高度"一棵树 - 高度对应于群集之间的距离测量。
在从某些输入数据集创建树形图之后,确定在哪里切割""树形图,意味着选择一个高度,使得只有那个高度以下的簇被认为是有意义的。
在剪切树形图的高度上并不总是很清楚,但是存在一些算法,例如 DynamicTreeCut 算法,它试图以编程方式从中选择有意义的聚类。树状图。
请参阅:
https://stats.stackexchange.com/questions/3685/where-to-cut-a-dendrogram
Cutting dendrogram at highest level of purity
所以我一直在阅读 DynamicTreeCut 算法,以及算法的Java implementation。我理解算法是如何工作的以及它在做什么,就逐步细分所发生的事情而言。但是,我无法理解 这个算法是如何做有意义的事情的。我想我在这里缺少一些关键概念。
通常,算法迭代高度序列"来自树状图。我不确定,但我认为这是一个高度序列"仅表示树状图沿Y轴的值,即聚类连接发生的各种高度。如果是这种情况,我们可以假设一个"高度序列"按升序排序。
然后算法要求采用"参考高度",l
,并从输入"高度序列"中的每个高度减去它。这为您提供了高度序列中每个高度D
与参考高度h[i]
之间的差异向量(l
)。
然后算法尝试找到转换点" - 差异向量中的点D[i] > 0
和D[i+1] < 0
。换句话说,差异向量中的点,其中差值从正变为负值。
就在这里,我完全迷失了。我不明白这些过渡点是如何有意义的。首先,我的理解是输入高度序列H
只是树形图的Y轴上的值。因此,高度序列H
应该是升序。因此,如何从正过渡到负的差异向量中有一个点?
例如:
假设我们的输入高度序列H为{1, 1.5, 2, 2.5, 3, 7, 9}
,我们的参考值l
是平均高度(3.7
)。因此,如果我们通过从D
中的每个高度减去l
来创建差异向量H
,我们就会获得{-2.7, -2.2, -1.7, -1.2, -0.7, 3.3, 5.3}
。很明显,这里没有转换点,也没有转换点,因为差异向量中没有D[i] > 0
和D[i+1] < 0
的点,因为高度序列H
位于升序。
很明显,我完全误解了这个算法的基本原理。也许我不理解&#34;身高序列&#34;的含义。我假设它只是来自树形图的Y轴上的值,但显然对于算法实际上做的事情没有任何意义。不幸的是,作者并没有真正解释树状图高度序列的含义,也不是数据科学界正在使用的某种标准术语。
那么可以解释一下DynamicTreeCut算法在这里尝试实现的内容,以及我理解错误的地方吗?
答案 0 :(得分:2)
我完全同意你对论文和算法的理解。我和你做了同样的结论。
我提供的是猜测。但我对此非常有信心。
直接的结论是,你不能将H作为有序的高度列表。相反,它应该是重新排序可视化点的高度,即&#34;这样得到的图中的线不会交叉&#34;
在该示例中,H将变为(0.70,0.35,0.90,0.45,0.77,0.40,0.30,0.55,0.05)。为了澄清,第一个条目0.70是第一个和第二个点之间的合并线的高度(这里称为3和7)。请注意,可视化不是唯一的,但最终算法的结果将是。
结论:因为在群集内部,合并高度较低,并且群集的H-l值为正,您需要一大堆低合并高度(即:群集)站在0行之上。因此,不要使用合并高度,而是使用否定
在示例中,H将变为(-0.70,-0.35,-0.90,...)。
让我们尝试我的假设,让l = -0.75
H-1变为(0.05,0.40,-0.15,0.30,-0.02,0.35,0.45,0.20,0.70)
你有两个定义3个集群的过渡:(3-7-6),(1-4)和(9-5-8-10-2)。查看图片以供参考。这感觉真的很合理。
我还可以得出结论,这是一种非常迂回的说法,它是固定高度分支切割。请注意,这只是TreeCutCore,因此所有动态部分都可以完成。老实说,当你意识到他们只是在较小和较小的集群上以不同的高度对TreeCutCore进行递归调用时,它并不复杂。
另外,作为另一种保险,当你一个接一个地有几个负值时,我并不完全错误,这意味着它对应于异常值的单例,这正是Node 54(你链接的文件的图5) )是。几个连续的负值本身并不构成一个集群,它们实际上是彼此不同的单体。只有0以上的连续组才能形成集群