Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 层次聚类启发式算法_Algorithm_Graph_Cluster Analysis_Data Mining_Hierarchical Clustering - Fatal编程技术网

Algorithm 层次聚类启发式算法

Algorithm 层次聚类启发式算法,algorithm,graph,cluster-analysis,data-mining,hierarchical-clustering,Algorithm,Graph,Cluster Analysis,Data Mining,Hierarchical Clustering,我想探索大数组中数据项之间的关系。由多维向量表示的每个数据项。首先,我决定使用集群化。我对发现集群(数据向量组)之间的层次关系感兴趣。我能计算向量之间的距离。所以在第一步,我要找到最小生成树。之后,我需要根据生成树中的链接对数据向量进行分组。但在这一步,我感到不安-如何将不同的向量组合成层次聚类?我在使用启发式:如果两个向量链接,并且它们之间的距离非常小-这意味着它们在同一个聚类中,如果两个WECTOR链接,但它们之间的距离大于阈值-这意味着它们位于具有公共根簇的不同簇中 但也许有更好的解决办法

我想探索大数组中数据项之间的关系。由多维向量表示的每个数据项。首先,我决定使用集群化。我对发现集群(数据向量组)之间的层次关系感兴趣。我能计算向量之间的距离。所以在第一步,我要找到最小生成树。之后,我需要根据生成树中的链接对数据向量进行分组。但在这一步,我感到不安-如何将不同的向量组合成层次聚类?我在使用启发式:如果两个向量链接,并且它们之间的距离非常小-这意味着它们在同一个聚类中,如果两个WECTOR链接,但它们之间的距离大于阈值-这意味着它们位于具有公共根簇的不同簇中

但也许有更好的解决办法

谢谢

p.S. 谢谢大家

事实上,我曾尝试使用k-means和CLOPE的一些变体,但没有得到好的结果

所以,现在我知道我的数据集的集群实际上具有复杂的结构(比n个球体复杂得多)。

这就是为什么我想使用分层聚类。另外,我猜集群看起来像n维连接(像3d或2d链)。所以我使用单链接策略。 但是我很不安-如何将不同的集群相互组合(在哪种情况下我必须创建公共根集群,在哪种情况下我必须将所有子集群组合在一个集群中?)。 我使用的策略很简单:

  • 如果集群(或向量)彼此太近,我会将它们的内容合并到一个集群中(由阈值调节)
  • 如果集群(或向量)彼此距离太远,我将创建根集群并将它们放入其中
但是使用这个策略,我得到了非常大的集群树。我正在努力寻找令人满意的阈值。但也许有更好的策略来生成集群树

下面是一张简单的图片,描述了我的问题:

在这方面已经做了大量工作。通常的建议是从K-means聚类开始,除非你有很好的理由不这样做——但是K-means不做层次聚类(通常无论如何),所以你可能有很好的理由不这样做(尽管完全可以通过第一次传递来创建簇,然后再进行另一次传递,将每个簇的质心作为一个点,并继续进行,直到获得所需的少量高级簇,从而实现分层K-means)

不过,还有很多其他聚类模型,也有很多论文涉及相对优势和劣势,例如:


  • 一点谷歌搜索就会发现更多。回顾我从事集群研究时的研究目录,我有几十篇论文,我的记忆是,我看了很多,但没有留下,还有更多的,我甚至没有机会真正看一看。

    有一整座集群ering算法。其中,最小生成树a.k.a.单链接聚类具有一些很好的理论特性,如在中所述。特别是,如果您采用最小生成树并删除所有长度超过某个阈值长度的链接,则将点分组到簇中的结果应具有剩余li的最小总长度nks用于任何大小的分组,这与Kruskal算法生成最小生成树的原因相同


    但是,不能保证最小生成树对于您的特定目的是最好的,因此我认为您应该写下您实际需要的聚类算法,然后根据这些算法选择一种方法,或者对您的数据尝试各种不同的聚类算法,看看哪种算法在实践中是最好的。

    上面第四条引文主要是关于您在编辑中添加的问题——如何决定何时合并集群与创建“超级集群”这包括了这两个方面。将最小生成树转化为分层聚类应该很简单。在树中找到最短的链接,将其两端的节点合并为单个节点,并使其成为两节点群集。现在,在树中找到下一个最短的链接,并将其两端的节点合并为两节点群集群集,可能包含前两个节点群集作为子群集,依此类推。如果您只需要一个单级群集,请删除最小生成树中长度超过某个阈值的所有链接,以生成一个断开连接的树林。同一树中的两个点位于同一个单级群集中。如果您找不到您喜欢的任何聚类算法,请考虑修改您的距离函数,或修改您输入其中的功能。如果您可以找到一个距离函数,使您想要在同一个簇中的每一对项目比不在同一簇中的每一对项目更接近,那么即使是非常简单的聚类算法也可以-例如,100个美国城市的最小生成树图片中的顺序引导算法:在stats.stackexchange上。