Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何按接近度对集合中的对象进行分组?_Algorithm_Cluster Analysis_Machine Learning - Fatal编程技术网

Algorithm 如何按接近度对集合中的对象进行分组?

Algorithm 如何按接近度对集合中的对象进行分组?,algorithm,cluster-analysis,machine-learning,Algorithm,Cluster Analysis,Machine Learning,我有一个包含数千个地址的集合。如果我能得到每个地址的经度和纬度,我该如何根据接近度将这些地址分组 此外,我可能希望根据不同的规则重试“群集”: N组 每个组有M个地址 组中任何地址之间的最大距离 对“N个组”和“每个组M个地址”的约束是相互排斥的。一个意味着另一个。您可以尝试该算法。您想要矢量量化: 它的工作原理是将一大组点(向量)分成若干组,每组的最近点数量大致相同。每个组都由其质心点表示,如k均值和其他一些聚类算法 这里的矢量是每个地址的地理坐标,您可以根据您的约束条件(接近度、组大小、

我有一个包含数千个地址的集合。如果我能得到每个地址的经度和纬度,我该如何根据接近度将这些地址分组

此外,我可能希望根据不同的规则重试“群集”:

  • N组
  • 每个组有M个地址
  • 组中任何地址之间的最大距离

对“N个组”和“每个组M个地址”的约束是相互排斥的。一个意味着另一个。

您可以尝试该算法。

您想要矢量量化:

它的工作原理是将一大组点(向量)分成若干组,每组的最近点数量大致相同。每个组都由其质心点表示,如k均值和其他一些聚类算法

这里的矢量是每个地址的地理坐标,您可以根据您的约束条件(接近度、组大小、组数…)为算法提供其他参数

您可以从k-means开始,但根据我的经验,基于Voronoi的算法更灵活。很好的介绍

  • 构建所有地址之间的距离矩阵
  • 从一个随机地址开始,按到该地址的距离升序对矩阵进行排序
  • 从矩阵中删除地址时,将最接近起始地址的地址放入新组,直到达到标准(组大小或最大距离)
  • 一旦一个组已满,请选择另一个随机地址,并根据到该地址的距离使用矩阵
  • 继续这样做,直到从矩阵中取出所有地址
  • 如果地址分布均匀,每个组的起始地址周围都会有一种圆形。当起始地址接近现有组时,就会出现问题。当这种情况发生时,如果你的止损标准只是组大小,新的组将有点像旧的组,甚至可以完全环绕它。如果使用“最大距离”(max distance)约束,则不会发生这种情况(假定没有其他约束)


    我真的不知道这是否是一个好的方法,但这是我会尝试的。我相信需要进行大量的优化。特别是对于边缘上的地址。

    这在一定程度上取决于要群集的数据规模。蛮力方法是计算距离数组中所有点组合之间的距离。结果数组为N^2,由于从A到B的距离与从B到A的距离相同,因此只需要这些距离的一半,因此结果集为N^2/2

    对于相对较近的lat-lon坐标,有时可以将lat-long用作x,y网格并计算笛卡尔距离。由于现实世界不是平坦的,笛卡尔距离会有误差。如果您的地址位于全国各地,则应使用更精确的计算方法,请参阅


    如果您没有处理整个距离矩阵的比例,则需要进行一些算法编程以提高效率

    你不能有N个组,每个组中有不同数量的地址吗?但这不是一个限制。这将是算法的结果。哪一个不是约束?无论如何,如果我说每个组必须有M个地址,那么我可能会得到N个已知的组。但如果我指定必须有N个组,那么每个组有M个地址可能是一个结果,也可能不是一个结果。格里夫斯先生给了我同样的答案。这就是我在开始一个答案之后,然后在我回来的时候完成答案,然后再去做的结果!您描述了将所有相对距离计算成N^2/2半矩阵的第一个技术阶段。但是考虑到这一点,你如何组建团队?