javascript - 寻找一种算法来聚类 3d 点,围绕 2d 点

标签 javascript algorithm math gis cluster-analysis

我正在尝试将照片(GPS + 时间戳)围绕已知的 GPS 位置进行聚类。

3d 点 = 2d + 时间戳。

例如: 我沿着路走,拍路灯柱的照片,有些很有趣,所以我拍了 10 张照片,有些不是,所以我没有拍。

我想将我的照片集中在灯柱周围,这样我就可以看到拍摄的是哪个灯柱。

我一直在研究 k-means 聚类之类的东西,并且想要一些智能的东西,而不仅仅是将照片拍到最近的路灯柱上。

(我打算用 javascript 为一次处理大约 (2000,500) 个点的客户端应用程序编写代码)

最佳答案

KMeans 聚类确实是一种流行且易于实现的算法,但它有几个问题。

  1. 您需要将簇数 N 作为输入提供给他 多变的。现在,因为我假设你不知道你有多少“东西” 想拍照,找到正确的 N。使用迭代 KMeans 或类似的变体只会将问题转移到为多集群分区找到合适的评估函数,这绝不比找到 N 本身更容易。

  2. 它只能检测线性可分的形状。假设您在凡尔赛宫走来走去,拍了很多外墙的照片。然后你走进去,拍下里面的花园。您获得的两个形状是一个里面有圆盘的雷神,但 KMeans 无法区分它们。

就个人而言,我会选择某种 Density Based Clustering :您仍然需要为算法提供一些变量,但是,由于我们假设空间是欧几里德空间,因此找到它们应该不会花费太多时间。此外,它使您能够区分噪声点和聚类点,并让您以不同的方式对待它们。

此外,它可以区分大多数形状,你不需要事先给出簇的数量。

关于javascript - 寻找一种算法来聚类 3d 点,围绕 2d 点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18405628/

相关文章:

math - 从 0 开始数组的好处?

javascript - 使用 selenium java/JavaScript 控制台更改检查元素?

algorithm - 在不使用 * 运算符且不使用按位的情况下将两个数字相乘,时间复杂度小于 O(N)

java - 使用 Java Sieve of Eratosthenes 算法大数时出现奇怪的数值错误?

algorithm - Yahtzee 3 的一种

math - 检查平面上的点在哪一侧

javascript - 第一个 JavaScript 完成后启动第二个 JavaScript

javascript - 输入点击时 Angular Bootstrap 模式打开

javascript - 使用 Angular ng-repeat 指令重复时复选框不起作用

javascript - MDN 示例(Math.random()): could it be parseInt() instead of Math. Floor()?