层次聚类启发式算法

4
我想探索大型数组中数据项之间的关系。每个数据项由多维向量表示。首先,我决定使用聚类。我有兴趣找到群集(数据向量组)之间的层次关系。我能够计算我的向量之间的距离。因此,在第一步中,我正在寻找最小生成树。然后,我需要根据生成树中的链接将数据向量分组。但在这一步骤中,我感到困扰 - 如何将不同的向量组合成层次聚类?我使用启发式方法:如果两个向量相连,并且它们之间的距离非常小 - 那就意味着它们在同一个簇中如果两个向量相连但它们之间的距离大于阈值 - 那就意味着它们在具有共同根簇的不同簇中

但也许有更好的解决方案吗?

谢谢

P.S. 感谢大家!

实际上,我尝试过k均值和CLOPE的某些变体,但没有得到很好的结果。

因此,现在我知道我的数据集的聚类实际上具有复杂结构(比n球更复杂)。

这就是为什么我想使用分层聚类。此外,我猜测聚类看起来像n维连接(如3d或2d链)。因此,我使用单链接策略。 但我感到困扰 - 如何将不同的聚类彼此组合在一起(在哪种情况下我必须创建共同根簇,在哪些情况下我必须将所有子簇组合成一个簇?)。 我使用这样简单的策略:

  • 如果群集(或向量)彼此太接近 - 我将它们的内容合并为一个群集(由阈值调节)
  • 如果群集(或向量)彼此太远 - 我将创建根群集并将它们放入其中

但是使用这个策略,我得到了非常大的簇树。我试图找到令人满意的阈值。但也许有更好的策略来生成簇树?

这里是一个简单的图片,描述了我的问题:

enter image description here

2个回答

4
在这个领域已经做了很多工作。通常的建议是除非你有一个真正好的理由,否则应该从K-means聚类开始 - 但是K-means不会进行层次聚类(通常情况下),所以您可能有一个很好的理由采取其他措施(尽管可以通过进行第一遍聚类来创建聚类,然后进行另一遍聚类,使用每个聚类的质心作为点,并继续直到您拥有所需数量的高级聚类)。
还有相当多的其他聚类模型,以及涵盖相对优缺点的论文,例如以下内容:
  1. 成对聚类和图形模型
  2. 超越成对聚类
  3. 并行成对聚类
  4. 快速贪心成对距离聚类算法及其在发现大型数据集中的主题结构中的应用
  5. 成对聚类算法
  6. 层次凝聚聚类
通过一些谷歌搜索可以找到更多相关内容。浏览我研究聚类时的研究目录,我有数十篇论文,我的回忆是我看过但没有保留很多文章,还有很多文章我甚至没有机会真正看。

1
以上第四个引用主要关注于您在编辑中添加的问题 - 如何决定何时合并聚类而不是创建一个包含两者的“超级聚类”。 - Jerry Coffin

2
有许多聚类算法,其中最小生成树(也称为单连通聚类)具有一些良好的理论特性,如在http://www.cs.uwaterloo.ca/~mackerma/Taxonomy.pdf中所述。特别是,如果您取一个最小生成树并删除所有长于某个阈值长度的链接,则点分组成簇的结果应该对于相同大小的任何分组而言都具有剩余链接的最小总长度,原因与Kruskal算法生成最小生成树的原因相同。
然而,没有保证最小生成树将是您特定目的的最佳选择,因此我认为您应该写下您实际需要的聚类算法,然后基于此选择方法,或者尝试在数据上使用各种不同的聚类算法,并查看哪种方法在实践中最好。

将最小生成树转换为分层聚类应该很简单。在树中找到最短的链接,将其两端的节点合并成一个单一节点,并将其作为一个双节点聚类。现在在树中找到下一个最短的链接,并合并该链接两端的节点以形成一个双节点聚类,该聚类可能包含第一个双节点聚类作为子聚类 - 依此类推。 - mcdowella
如果您只需要单层聚类,则删除最小生成树中长度大于某个阈值的所有链接,以产生一组不相连的树。同一棵树中的两个点属于同一个单层聚类。 - mcdowella
1
如果您找不到任何满意的聚类算法,请考虑修改距离函数或修改输入到其中的特征。如果您可以找到一种距离函数,使得您想要放在同一簇中的每对项目之间的距离比不在同一簇中的每对项目之间的距离更近,则即使是非常简单的聚类算法也可以使用 - 例如 http://www.comp.lancs.ac.uk/~kristof/research/notes/clustr/index.html 中的顺序领导算法。 - mcdowella
在stats.stackexchange上,有一张100个美国城市的最小生成树图片:聚类可视化软件 - denis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接