具有经度和纬度值的Java KMeans算法
我发现下面的算法可以完美地处理单个值[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
有没有一种方法可以从Longitude
和Latitude
计算一个值,从而应用此算法
# 1 楼答案
有一个叫做geohash的概念,它本质上是将经度转换为字符串(字母数字),从中很容易找到附近的地方。你可以看看。有图书馆可以找到geohash的邻居
然而,K-means在地理空间数据上并不适用。原因很简单,地理空间数据是非线性的。一般来说,最好使用DBSCAN/CLARA进行此操作
关于将地理空间数据转换为单个值。我想这里也讨论过同样的话题:
# 2 楼答案
有几种方法可以做到这一点,但这些方法不适用于聚类地理点,可以将坐标视为二维向量,这样就可以将所有向量规范转换为一维值see her for different norms,但这对你没有多大帮助
在一个完美的实现中,K-Means也会将距离函数作为参数。在for循环中,您可以看到您的代码使用绝对值
abs(c - aItem)
作为距离函数,例如,您需要更改它以使用合适的距离函数look here