ELKI を使用していくつかの地理空間データ (緯度と経度のペア) をマイニングしていますが、適切なデータ型とアルゴリズムを使用することに非常に関心があります。私のアルゴリズムのパラメータライザーで、次のようにジオ関数 (x、y データを使用しているため、LngLatDistanceFunction) によってデフォルトの距離関数を変更しようとしました。
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);
私のコードに何か問題があるのだろうか。
次のように、アルゴリズムをデータベースで直接実行しています。
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 は非常に効率的で洗練されたライブラリだと思いますが、私のような単純なケースを説明する例を見つけるのに苦労しています。