如何使用PHP从距离矩阵中获取聚类?

时间:2017-11-30 16:01:24

标签: php arrays matrix k-means hierarchical-clustering

我将距离矩阵作为二维数组,如下所示:

distance matrix

所以,我需要在它的帮助下找到元素的集群。我可以使用层次聚类来完成它,就像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],
];

1 个答案:

答案 0 :(得分:1)

首先:一个挑剔:k-Means不是一个层次聚类算法,详情见https://www.quora.com/What-is-the-difference-between-k-means-and-hierarchical-clustering

第二:当您退后一步时,您不希望将距离矩阵转换回它起源的点。可悲的是,您链接的k-Means实现只有一个API,允许您输入原始坐标并假设欧几里德距离,因此您有一些可能性,具体取决于您的要求:

  1. 你从哪里得到距离矩阵?如果可能,获取原始坐标(并确保距离度量是欧几里德距离)并使用您链接的库。

  2. 覆盖您链接的库中的Point类:特别是getDistanceWith方法,以便从矩阵中返回值

  3. 如果您只需要计算一次集群,请使用python和sklearn。这个库完全符合你的要求。特别是:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.cluster.hierarchy.linkage.html

  4. 编写自己的代码:集群是一个非常简单的主题,因此它是一个很好的编码练习。