首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ELKI上使用Geo距离函数

在ELKI上使用Geo距离函数
EN

Stack Overflow用户
提问于 2014-05-15 16:38:17
回答 1查看 514关注 0票数 2

我正在使用ELKI来挖掘一些地理空间数据(lat、long对),我非常关注使用正确的数据类型和算法。在我的算法参数化器上,我尝试用geo函数(LngLatDistanceFunction,因为我使用的是x,y数据)来更改默认的距离函数,如下所示:

代码语言:javascript
复制
params.addParameter (DISTANCE_FUNCTION_ID,  geo.LngLatDistanceFunction.class);

然而,结果是相当令人惊讶的:它创建了重复点的集群,例如下面的示例:

(2.17199922,41.38190043,NaN),(2.17199922,41.38190043,NaN)]

本例的这是一张图片

是否使用非geo距离(例如曼哈顿):

代码语言:javascript
复制
params.addParameter (DISTANCE_FUNCTION_ID,  geo.minkowski.ManhattanDistanceFunction.class);

,t他的产量要合理得多

我想知道我的代码是不是出了什么问题。

我直接在db上运行算法,如下所示:

代码语言:javascript
复制
         Clustering<Model> result = dbscan.run(db); 

然后在循环中迭代结果,同时构造凸包:

代码语言:javascript
复制
   for (de.lmu.ifi.dbs.elki.data.Cluster<?> cl : result.getAllClusters()) {
               if (!cl.isNoise()){
                     Coordinate[] ptList=new Coordinate[cl.size()];
                        int ct=0;               

                        for (DBIDIter iter = cl.getIDs().iter(); 
                                iter.valid(); iter.advance()) {
                                ptList[ct]=dataMap.get(DBIDUtil.toString(iter));                                                                                                                                            
                                ++ct;                                                                   
                        }       

                        GeoPolygon poly=getBoundaryFromCoordinates(ptList);
                        if (poly.getCoordinates().getGeometryType()==
                        "Polygon"){                                                     
                            out.write(poly.coordinates.toText()+"\n");
                        }                      
               }
            }            

要将每个ID映射到某一点,我使用hashmap,在读取数据库时对其进行初始化。我之所以添加这段代码,是因为我怀疑我可能在传递/读取到/从算法中传递/读取的结构上做了错误的事情。我预先感谢你的任何意见,可以帮助我解决这一问题。我发现ELKI是一个非常高效和复杂的库,但是我很难找到一些例子来说明简单的案例,比如我的例子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-16 14:15:46

您的epsilon值是多少?

地理距离是以米为单位的埃尔基(如果我没记错的话);曼哈顿的距离将在纬度+经度。由于明显的原因,它们生活在非常不同的尺度上,因此您需要选择不同的epsilon值。

在前面的问题中,您使用了epsilon=0.008。大地测量距离为0.008米=8毫米。

当epsilon =8毫米时,如果你得到的星系团只包含重复的坐标,我并不感到奇怪。上述坐标在数据集中存在多次的可能性吗?

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23684070

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档