Memory management 实现分层聚类的数据结构

Memory management 实现分层聚类的数据结构,memory-management,data-structures,machine-learning,cluster-analysis,hierarchical-clustering,Memory Management,Data Structures,Machine Learning,Cluster Analysis,Hierarchical Clustering,如果我要实现一个分层聚类算法,比如说在C/C++或Java中——给定计算集群之间和集群内距离的函数- 1。我的选择是什么(以及其他选项)来实现数据结构,存储来自以下定义为n^2的邻近度量的每个“过程”中计算出的聚类结果 2。如果我使用自上而下而不是自下而上构建相应的密度图,那么数据结构的选择是否会有所不同 自下而上的dendogram示例(源代码,Wiki) 3.由于计算集群及其质心的问题是计算密集型的(贪婪算法?)-这会随着数据结构的选择而变得更好吗?您能想到的抽象选择是什么 4.在这种情况

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

1。我的选择是什么(以及其他选项)来实现数据结构,存储来自以下定义为n^2的邻近度量的每个“过程”中计算出的聚类结果

2。如果我使用自上而下而不是自下而上构建相应的密度图,那么数据结构的选择是否会有所不同

自下而上的dendogram示例(源代码,Wiki)

3.由于计算集群及其质心的问题是计算密集型的(贪婪算法?)-这会随着数据结构的选择而变得更好吗?您能想到的抽象选择是什么

4.在这种情况下,真的有这样一种东西吗?稀疏矩阵[在计算了2个点的接近度后,这些点会继续增长以吸收更多的相邻点,如果我们将“新”距离存储在一个新矩阵中,那么会有更少的点]? 数据结构是否会因需要而收缩/增长?

5.该矩阵是否可以存在于内存中或其集群的一部分中?如果不存在,在计算每个下一个集群(聚合集群或其他)之前,我们必须将什么重新加载到内存中

+1如果你坚持一个概念性的(希望是直观的)答案/或将我引向那个方向


PPS:我不需要一个函数来帮助我实现这一点——我只想从内存管理和概念的角度来理解这一点。我对这方面的知识很少,所以如果这听起来太原始,请忽略。

我建议您看看R.Sibson的Slink算法论文,它定义了一种称为PointerHierarchy的数据结构,您可以使用该结构在给定距离处切割数据图,以获得集群。该算法不需要提前准备相似矩阵,这样可以减少内存占用。本文还提供了一个用FORTRAN实现的示例,您可以轻松地用自己选择的语言编写。我在java的生产代码中使用了这种方法,结果非常好。

也许你可以1。具体一点2。指出你实际上想做什么
        Corresponding Proximity matrix
   p1 p2 p3 p4 .... and hence n*n 
p1 d11 d12 d13 d14
p2 ...
p3...
p4 ...