2

ELKI を使用していくつかの地理空間データ (緯度と経度のペア) をマイニングしていますが、適切なデータ型とアルゴリズムを使用することに非常に関心があります。私のアルゴリズムのパラメータライザーで、次のようにジオ関数 (x、y データを使用しているため、Lng​​LatDistanceFunction) によってデフォルトの距離関数を変更しようとしました。

params.addParameter (DISTANCE_FUNCTION_ID,  geo.LngLatDistanceFunction.class);

しかし、結果は非常に驚くべきものです。次の例のように、繰り返されるポイントのクラスターが作成されます。

(2.17199922, 41.38190043, NaN), (2.17199922, 41.38190043, NaN), (2.17199922, 41.38190043, NaN), (2.17199922, 41.38190043, NaN), (2.17199922, 41.38190043, NaN), (2.17199922, 41.38190043, NaN), (2.17199922 [

これは、この例のイメージです。

非地理距離を使用したかどうか(たとえば、マンハッタン):

params.addParameter (DISTANCE_FUNCTION_ID,  geo.minkowski.ManhattanDistanceFunction.class);

、t彼の出力ははるかに合理的です

私のコードに何か問題があるのだろうか。

次のように、アルゴリズムをデータベースで直接実行しています。

         Clustering<Model> result = dbscan.run(db); 

そして、凸包を構築しながら、結果をループで反復処理します。

   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 をポイントにマップするには、データベースの読み取り時に初期化したハッシュマップを使用します。このコードを追加する理由は、アルゴリズムに渡したり、アルゴリズムから読み取ったりする構造に関して何か間違ったことをしている可能性があると思われるためです。これを解決するのに役立つコメントがあれば、事前に感謝します。ELKI は非常に効率的で洗練されたライブラリだと思いますが、私のような単純なケースを説明する例を見つけるのに苦労しています。

4

1 に答える 1

2

What is your epsilon value?

Geographic distance is in meters in ELKI (if I recall correctly); Manhattan distance would be in latitude + longitude degrees. For obvious reasons, these live on very different scales, and therefore you need to choose a different epsilon value.

In your previous questions, you used epsilon=0.008. For geodetic distance, 0.008 meters = 8 millimeter.

At epsilon = 8 millimeter, I am not surprised if the clusters you get consist only of duplicated coordinates. Any chance that above coordinates do exist multiple times in your data set?

于 2014-05-16T14:15:46.083 に答える