实现分层聚类的数据结构

时间:2014-01-22 13:45:10

标签: memory-management data-structures machine-learning cluster-analysis hierarchical-clustering

如果我要实现一个分层聚类算法,比如在C / C ++或Java中 - 给出计算&和/或之间距离的函数。在集群内 -

1 即可。我将选择(以及其他选项)来实现数据结构,以便在接近度量中存储每个“通道”中的计算集群的结果,该接近度量被定义为下面的n ^ 2。

        Corresponding Proximity matrix
   p1 p2 p3 p4 .... and hence n*n 
p1 d11 d12 d13 d14
p2 ...
p3...
p4 ...

2 即可。如果我使用自上而下而不是自下而上构建相应的树状图,那么数据结构的选择会有所不同吗?

enter image description here

自下而上树状图的一个例子(来源,维基)

3。由于计算集群的问题&它的质心是计算密集型(贪心算法?) - 数据结构的选择会变得更好 - 您能想到的抽象选择是什么?

4。 稀疏矩阵真的有这样的事情[已经计算了2点的接近度,然后增长以吸收更多的相邻点,会有如果我们要在这个背景下将我们的“新”距离存储在一个新的矩阵中,那就更少了点? 数据结构是否会根据需要缩小/增长?

5. >此矩阵是否可以在内存中,或者其集群的某些部分 - 如果不存在,我们必须在计算每一个下一个之前重新加载到内存中集群(凝聚聚类,或其他)

+1如果您坚持使用概念(并且希望直观)答案/或将我重定向到该方向

PPS:我不需要帮助我实现这个功能 - 只是想通过内存管理来理解这个功能。概念观点与大型数据集。我对这个主题知之甚少,所以如果听起来太原始,请忽略。

1 个答案:

答案 0 :(得分:0)

我建议你看看R.Sibson的Slink算法文件,它定义了一个名为PointerHierarchy的数据结构,使用它可以在给定距离处切割dandogram以到达簇。该算法不需要您提前准备相似性矩阵,这将减少内存占用。本文还提供了FORTRAN中的示例实现,您可以使用您选择的语言轻松编写。我在java的生产代码中使用了这个方法,结果非常好。