我正在尝试将照片(GPS +时间戳)聚集在已知的GPS位置周围。
3d点= 2d +时间戳。
例如: 我走在路上拍照灯柱照片,有些很有趣,所以拍了10张照片,其他照片不是这样,我不带任何照片。
我想把我的照片聚集在灯柱周围,这让我可以看到正在拍摄的灯柱。
我一直在寻找像k-means聚类这样的东西,想要一些聪明的东西,而不仅仅是把照片贴到最近的灯柱上。
(我将在javascript中为客户端应用程序编写代码,一次处理(2000,500)个点)
答案 0 :(得分:1)
KMeans群集确实是一种流行且易于实现的算法,但它存在一些问题。
您需要向他提供群集数 N
作为输入
变量。现在,因为我假设你不知道你有多少“事”
想要写入图片,找到合适的N.使用迭代KMeans或类似的变体只会将问题滑动到为多集群分区找到合适的评估函数,这样就更容易找到N本身。
它只能检测线性可分离的形状。假设你在凡尔赛宫周围散步,你会拍摄很多外墙照片。然后你进去,并拍摄内部花园的照片。你获得的两种形状是一个带有圆盘的刺,但KMeans无法区分它们。
就个人而言,我会选择某种Density Based Clustering:你仍然需要为算法提供一些变量,但是,因为我们假设空间是欧几里得,所以找到它们也不应该许多。此外,它使您能够从群集点中区分出噪点,并让您以不同方式对待它们。
此外,它可以区分大多数形状,而且您不需要事先给出簇数。
答案 1 :(得分:1)
基于密度的聚类,例如DBSCAN,绝对是最佳选择。
DBSCAN的两个参数设置应该非常明显:
epsilon:这是聚类的半径,例如你可以使用10米,假设没有距离不到10米的灯柱。 (你应该使用大地距离,而不是欧几里德!)
minPts:基本上是群集的最小大小。您可以使用1或2,偶数。
距离:此参数是隐含的,但可能更重要。您可以在这里使用空间和时间的组合。例如。空间10米,时域1年。有关更灵活的版本,请参阅广义DBSCAN,这使得如何使用多个域显而易见。
答案 2 :(得分:0)
您可以使用delaunay三角测量来查找最近的点。它为您提供了最近邻图,其中点位于delaunay边缘。或者您可以像照片马赛克一样按颜色进行聚类。它使用反极树。这是一个类似的答案:Algorithm to find for all points in set A the nearest neighbor in set B