我有一个算法可以将数据分组到一个层次聚类树中。这个算法是Toby Seagram在《Programming Collective Intelligence》一书中描述的。树的输出是一个二叉树,每个节点都有一个“距离”值,指示两个子节点之间的距离。
我可以将其显示为树状图,这样人类可以很容易地看出哪些值被分组在一起。然而,我在寻找一个能够自动决定分组的算法时遇到了困难。我希望能够自动确定:
- 组的数量
- 哪些点应该被放入每个组中
有没有标准的算法来做这件事?
回答:
我认为没有默认的方法来做这件事。简单的“手动”方法包括:
- 指定你想要/期望的聚类数量
- 设置两个节点之间最大距离的阈值;任何距离大于该阈值的节点属于另一个聚类
有一些自动方法可以确定数据集中聚类的数量。R
语言有动态树切割包,它可以自动处理这个问题,另外pvclust也可以使用。这里还有两个方法来处理这个问题,分别是Salvador (2002)和Daniels (2006)。