【问题标题】:Clustering location data ignore outliers聚类位置数据忽略异常值
【发布时间】:2016-10-10 13:10:34
【问题描述】:

我正在对 GPS 位置进行聚类

我得到了大约 4000 个数据点,我使用了 Kmeans 聚类算法。

这是我得到的结果:

标记是真实数据位置,而绿色圆圈区域(质心)是kmeans结果。

可以看到右上角的聚类,受到一些异常值的影响

有什么方法可以消除异常值的影响,从而找出准确的聚类质心?谢谢

================================================ ==============

我得到的 GEOdata 格式如下:

[
{"lat": 22.28552,
 "lng": 114.15769
},
...
]

我使用的 kmeans 算法是关注here。但是我把距离改成了distance = Math.sqrt((x1-x2)*(x1-x2) + (y1-y2)*(y1-y2))

【问题讨论】:

  • 该结果看起来不正确。你可以创建一个小提琴或发布一些代码吗?你如何初始化质心?
  • @MattWay 我更新了我的问题。质心是通过聚类对应的数据的平均值来计算的,如(x1+x2+...+xn)/number_of_point_in_cluster1,(y1+y2+...+yn)/number_of_point_in_cluster1
  • 是的,但是如何初始化它们?他们从哪里开始?
  • 我选择了簇数=5。簇质心的初始化:data_array[data_array.length/number_cluster]
  • 另请注意,使用欧几里德距离作为纬度和经度可能不会给您预期的结果,例如1°经度=北极或南极0公里,赤道1°经度~~40000/360公里……毕竟是一个球体。

标签: javascript machine-learning geometry google-visualization cluster-analysis


【解决方案1】:

对于此类数据,K-means 是一个糟糕的选择。

  1. 对异常值很敏感

  2. 它不适用于半正弦距离(不要在地理坐标上使用欧几里得!)

此类数据的热门选择包括 DBSCAN 和 OPTICS。

【讨论】:

    猜你喜欢
    • 2019-06-13
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 2022-06-16
    相关资源
    最近更新 更多