如何使用 PHP 从距离矩阵中获取集群?

Posted

技术标签:

【中文标题】如何使用 PHP 从距离矩阵中获取集群?【英文标题】:How can I get clusters from distance matrix, using PHP? 【发布时间】:2018-05-14 15:02:58 【问题描述】:

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

所以,我需要在它的帮助下找到元素的集群。我可以做到这一点,使用分层聚类,如 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】:

首先:吹毛求疵: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

    编写您自己的代码:集群是一个相当简单的话题,因此它是一个很好的编码练习。

【讨论】:

以上是关于如何使用 PHP 从距离矩阵中获取集群?的主要内容,如果未能解决你的问题,请参考以下文章

如何仅使用 numpy 从距离矩阵中提取数据点?

sklearn:从点到最近的集群获取距离

如何使用 php 通过谷歌地图获取步行或驾车距离

API 距离矩阵仅在 Javascript 中调用

如何使用带有 ELKI 库的距离矩阵对数据进行聚类?

kNN - 如何根据计算出的距离在训练矩阵中定位最近的邻居