我将距离矩阵作为二维数组,如下所示:
所以,我需要在它的帮助下找到元素的集群。我可以使用层次聚类来完成它,就像k-means一样。我在PHP K-Means
找到了这样的例子如何将我的二维数组转换为此示例中列出的点数组?
$points = [
[80,55],[86,59],[19,85],[41,47],[57,58],
[76,22],[94,60],[13,93],[90,48],[52,54],
[62,46],[88,44],[85,24],[63,14],[51,40],
[75,31],[86,62],[81,95],[47,22],[43,95],
[71,19],[17,65],[69,21],[59,60],[59,12],
[15,22],[49,93],[56,35],[18,20],[39,59],
[50,15],[81,36],[67,62],[32,15],[75,65],
[10,47],[75,18],[13,45],[30,62],[95,79],
[64,11],[92,14],[94,49],[39,13],[60,68],
[62,10],[74,44],[37,42],[97,60],[47,73],
];
答案 0 :(得分:1)
首先:一个挑剔:k-Means不是一个层次聚类算法,详情见https://www.quora.com/What-is-the-difference-between-k-means-and-hierarchical-clustering。
第二:当您退后一步时,您不希望将距离矩阵转换回它起源的点。可悲的是,您链接的k-Means实现只有一个API,允许您输入原始坐标并假设欧几里德距离,因此您有一些可能性,具体取决于您的要求:
你从哪里得到距离矩阵?如果可能,获取原始坐标(并确保距离度量是欧几里德距离)并使用您链接的库。
覆盖您链接的库中的Point
类:特别是getDistanceWith
方法,以便从矩阵中返回值
如果您只需要计算一次集群,请使用python和sklearn。这个库完全符合你的要求。特别是:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.cluster.hierarchy.linkage.html
编写自己的代码:集群是一个非常简单的主题,因此它是一个很好的编码练习。