如果我要实现一个分层聚类算法,比如在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 即可。如果我使用自上而下而不是自下而上构建相应的树状图,那么数据结构的选择会有所不同吗?
自下而上树状图的一个例子(来源,维基)
3。由于计算集群的问题&它的质心是计算密集型(贪心算法?) - 数据结构的选择会变得更好 - 您能想到的抽象选择是什么?
4。 稀疏矩阵真的有这样的事情[已经计算了2点的接近度,然后增长以吸收更多的相邻点,会有如果我们要在这个背景下将我们的“新”距离存储在一个新的矩阵中,那就更少了点? 数据结构是否会根据需要缩小/增长?
5. >>此矩阵是否可以在内存中,或者其集群的某些部分 - 如果不存在,我们必须在计算每一个下一个之前重新加载到内存中集群(凝聚聚类,或其他)
+1如果您坚持使用概念(并且希望直观)答案/或将我重定向到该方向
PPS:我不需要帮助我实现这个功能 - 只是想通过内存管理来理解这个功能。概念观点与大型数据集。我对这个主题知之甚少,所以如果听起来太原始,请忽略。
答案 0 :(得分:0)
我建议你看看R.Sibson的Slink算法文件,它定义了一个名为PointerHierarchy的数据结构,使用它可以在给定距离处切割dandogram以到达簇。该算法不需要您提前准备相似性矩阵,这将减少内存占用。本文还提供了FORTRAN中的示例实现,您可以使用您选择的语言轻松编写。我在java的生产代码中使用了这个方法,结果非常好。