【问题标题】:Java K-Means with Longitude and Latitude values具有经度和纬度值的 Java K-Means
【发布时间】:2018-02-26 23:15:00
【问题描述】:

我发现以下算法可以完美地处理单个值[2;4;56;10;34;....]https://radixcode.com/k-mean-clustering-algorithm-implementation-in-c-java

现在我想用geolocation coordinates替换我的奇异数据集-

例如,假设我有以下对:

Longitude: 759849.934, Latitude: 193728.08
Longitude: 760151.603, Latitude: 192624.342
Longitude: 759217.306, Latitude: 191895.671
Longitude: 758446.428, Latitude: 191074.83
Longitude: 758422.0, Latitude: 192359.0

有没有办法从LongitudeLatitude 计算单个值以应用此算法?

【问题讨论】:

    标签: java algorithm latitude-longitude k-means


    【解决方案1】:

    有几种方法可以做到这一点,但这些方法不适合聚类地理点将坐标视为二维向量,因此您将拥有所有向量范数来将它们转换为一维值see her for different norms 但那赢了对你帮助不大。

        for (int c : cz) {
            row.add(abs(c - aItem));
          }
       groups.get(row.indexOf(Collections.min(row))).add(aItem);
       row.removeAll(row);
    

    完美实现中的 K-Means 也将距离函数作为参数。在 for 循环中,您会看到您的代码使用绝对值 abs(c - aItem) 作为距离函数,您需要将其更改为使用合适的距离函数,例如 here

    【讨论】:

    • 感谢 Ketrox。如果不完美也没问题,我只是在寻找“尽可能好”的第一个实现。但我最初的问题仍然存在:有没有办法将经度和纬度值转换为单个值?我也准备好以下可以做到:(lat+90)*180+lng ...你同意吗?
    【解决方案2】:

    有一个叫做 geohash 的概念,它本质上将纬度经度转换为字符串(字母 - 数字),从中很容易找到附近的地方。你可以看看。有一些库可以找到 geohash 的邻居。

    但是,K-means 不适用于地理空间数据。原因很简单,地理空间数据是非线性的。一般情况下,最好使用 DBSCAN/CLARA。

    关于将地理空间数据转换为单一值。我认为这里已经讨论了同样的话题:

    https://stackoverflow.com/questions/8285599/is-there-a-formula-to-change-a-latitude-and-longitude-into-a-single-number
    

    【讨论】:

      猜你喜欢
      • 2011-04-04
      • 2020-10-03
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 2014-04-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多