动态聚合聚类?飞机上的点

时间:2012-07-31 09:39:59

标签: algorithm hadoop machine-learning cluster-analysis computational-geometry

问题:

我有数百万(10+)个标记,每个标记都有不同的字段:

 1. lat 
 2. lng   
 3. area (double)
 4. size (int)
 5. tolerance (double)
 6. lags (boolean)
 7. channel (boolean)
... (more)

现在,我希望每个群集都有以下聚合数据:

 1. number of markers
 2. min area
 3. max area
 4. avg area
 5. min size
 6. max size
 7. avg size
 8. tolerance distribution (how many where of tolerance < X, other >=X < Y and >=Y <Z where X,Y,Z constants)
 ... (more)

基于lat,lng标记(距离方式)和基于缩放级别(int)创建聚类。

无问题的部分(**):

  

计算所有缩放级别的聚类,无论其如何   条件“全押”。这是通过创建树来完成的,并且为用户提取集群是直截了当的。

现在问题:

  

用户可以根据标记字段进行查询,例如“显示所有标记”   他们的区域&gt; K和lags = true“。仅对于此查询,整体   需要创建新的集群树。如果他改变查询“显示   我所有标记他们的区域&gt; K.0001和lags = true“和新树   必须创建。我不想为这样的树计算   每个用户的查询,而不是将其存储在内存中(不确定是否是   可能的)。

问题:

What approach should be taken ?
given the complexity of calculation X # of markers 
(fields inside) X speed factor. 
I was thinking that there's some sort of way to use  the 
"all-in" clusters calculation(**), as it gives me ALL the markers and clusters and from 
there to manipulate in some elegant way.

威尔:

 - space-filling-curve (hilbert) can help? how?  
 - DB approach (what DBand why?)
 - k-d tree ?

整个想法是预先处理大量数据和计算,这样用户就可以在不需要计算它或服务器端的情况下对其进行操作(因此客户端聚类不是解决方案,融合表为孔)

非常欢迎代码示例

谢谢。

1 个答案:

答案 0 :(得分:0)

Hadoop适用于预处理,而不适用于在线(“实时”)操作。

希尔伯特曲线和k-d树比常规网格文件/四叉树更复杂,实际上对你没那么有用。优化树以完全匹配您的可视化缩放级别!然后你可以在没有做任何“聚类”的情况下离开,但只是想象出合适的四叉树细胞。

毕竟,你的空间数据只有2d,所以所有的2d方法都可以正常工作。你知道价值范围非常好,因为地球不会改变大小。这就是为什么谷歌地图这么快:它们使用固定的磁贴,它们可以缓存,有效地提供服务并预生成。

鉴于您可能不需要ACID和事务以及这些高级功能,使用其中一个大肆宣传的NoSQL数据库似乎是合理的。