【问题标题】:How to best do server-side geo clustering?如何最好地进行服务器端地理集群?
【发布时间】:2012-01-14 00:14:43
【问题描述】:

我想对一组大约进行预聚类。 500,000 点。

我还没有开始,但这是我认为我会做的:

  • 将所有点存储在本地SOLR 索引中
  • 根据一些行政信息(例如大城市)确定“自然集群位置”
  • 然后为每个城市计算一个集群:
    • 为每个城市
      • 每个缩放级别
        • 查询索引以获取城市周围半径中包含的点(半径的长度取决于缩放级别)

这应该是相当高效的,因为只有 100 个主要城市,而且 SOLR 查询非常快。但稍加思考后发现这是错误的:

  1. 可能存在比城市更“接近”的点集群:它们应该拥有自己的集群
  2. 在某些缩放级别下,某些点不在任何城市的可接受距离内,因此不会被计算在内
  3. 一些城市彼此靠近,因此,一些点将被计算两次(添加到两个集群中)

还有其他方法:

  • 检查每个点并确定它属于哪个集群;这消除了上面的问题 2 和 3,但不是 1,而且效率也极低
  • 制作一个(矩形)网格(针对每个缩放级别);这可行,但会导致疯狂/任意的集群,这些集群并不“意味着”任何东西

我想我正在寻找一种通用的地理聚类算法(或 idea),但似乎找不到。


编辑以回答 Geert-Jan 的评论

我想构建“自然”集群,是的,是的,我担心如果我使用任意网格,它不会反映数据的真实性。例如,如果在两个矩形的交点处或附近的一个点周围发生了许多事件,我应该只得到一个集群,但实际上会构建两个(每个矩形中一个)。

最初出于性能原因我想使用 localSOLR(因为我知道它,并且有更好的经验将大量数据索引到 SOLR 中而不是将其加载到传统数据库中);但是由于我们谈论的是预聚类,所以性能可能并不那么重要(尽管可视化新聚类实验的结果不应该花费数天时间)。我根据预定义的一组“大点”查询大量点的第一种方法显然是有缺陷的,我提到的第一个原因是最强的:集群应该反映数据的现实,而不是其他一些官僚定义(他们会显然重叠,当然,但数据应该是第一位的)。

有一个用于实时集群的出色集群器,已添加到核心 Google 地图 API:Marker Clusterer。我想知道是否有人尝试过“离线”运行它:运行它需要的任意时间,然后存储结果?

或者是否有一个聚类器可以逐点检查每个点,并输出包含其坐标和点数的聚类,并且在合理的时间内执行此操作?

【问题讨论】:

  • 我是否理解正确,您担心所有方法都会出现误报和/或误报,因为您从搜索空间的某种非自然分区开始,(可能是出于性能原因) .您能否详细说明这些要点是什么?你说:'制作一个(矩形)网格(针对每个缩放级别);这可行,但会导致疯狂/任意的集群,这些集群并不“意味着”任何东西。理想情况下,点簇对您意味着什么?也许您不需要非自然分区,但如果没有更多的洞察力,我真的不能说。
  • 对不起,我之前没有看到您的评论,我依赖自动通知,显然这不包括 cmets...我正在更新我的问题以回答您的评论。
  • 目前没有太多时间:看一下算法类:基于层次的聚类(可以根据缩放级别将较小的聚类合并/拆分为较大的聚类。另请查看概念“基于密度的聚类”与“基于距离的聚类”相比。我觉得“基于密度的聚类”可能会为您的目标提供更自然的聚类。这些算法不是专门与地理相关的(但当然是空间相关的)。这个可能不需要成为问题,在相对较小的区域(如城市)上,您可能会忘记地球是“圆的”.. hth
  • 你有什么发现吗?我们正在尝试做同样的事情......
  • 你能提供一下你最终做了什么吗?

标签: solr cluster-analysis server-side geo localsolr


【解决方案1】:

您可能想研究先进的聚类算法,例如 OPTICS。

有了一个好的数据库索引,它应该是相当快的。

【讨论】:

    猜你喜欢
    • 2011-08-09
    • 2015-07-21
    • 1970-01-01
    • 2011-06-19
    • 2010-10-31
    • 2016-04-06
    • 2016-08-31
    • 2012-09-23
    • 1970-01-01
    相关资源
    最近更新 更多