問題タブ [dbscan]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cluster-analysis - ELKI での DBSCAN の実行
いくつかの地理空間データをクラスター化しようとしていますが、以前にWEKAライブラリーを試しました。このベンチマークを見つけて、 ELKIを試してみることにしました。
ELKI を Java ライブラリとして使用しないようにというアドバイス(UI よりもメンテナンスが少ないと思われます) にもかかわらず、私は ELKI をアプリケーションに組み込みました。その結果には非常に満足していると言えます。データを保存するために使用する構造は、Weka が使用するものよりもはるかに効率的であり、空間インデックスを使用するオプションがあるという事実は、明らかにプラスです.
しかし、Weka の DBSCANの結果とELKI の DBSCANの結果を比較すると、少し戸惑います。実装が異なるとわずかに異なる結果が生じる可能性があることは認めますが、これらの違いの大きさから、アルゴリズムに(おそらく私のコードに)何か問題があると思います。クラスタの数とそのジオメトリは、2 つのアルゴリズムで大きく異なります。
記録のために、ELKI の最新バージョン (0.6.0) を使用しています。シミュレーションに使用したパラメーターは次のとおりです。
minpts=50 イプシロン=0.008
2 つの DBSCAN 関数 (Weka と ELKI 用) をコーディングしました。ここで、「エントリ ポイント」はポイントを含む csv であり、両方の「出力」も同じです: ポイント セットの凹包を計算する関数 (クラスタごとに 1 つ)。csvファイルをELKI「データベース」に読み込む機能は比較的単純なので、私の問題は次のようになると思います。
a) アルゴリズムのパラメータ化。b) 結果の読み取り (ほとんどの場合)。
DBSCAN をパラメーター化しても問題は発生しません。以前に UI でテストした 2 つの必須パラメーターを使用します。
クラスターを格納する構造の構成を完全には理解していないため、結果を読み取るのは少し難しいです。私の考えは、ポリゴンを生成するために、各クラスターを反復処理し、ポイントのリストを取得し、それを凹包を計算する関数に渡すことです。
「ノイズ」がクラスターとして発生していることに気付いたので、このクラスターを無視しました (描画したくありません)。多くの例が見つからないため、これがクラスターを読み取る正しい方法であるかどうかはわかりません。また、いくつかの質問がありますが、まだ答えが見つかりません。
- getAllClusters() と getTopLevelClusters() の違いは何ですか?
- DBSCAN クラスターは「ネスト」されていますか?つまり、同時に多くのクラスターに属するポイントを持つことができますか? なんで?
- ELKI の内部使用のため、ポイントを識別するためにデータベース ID を使用すべきではないことをどこかで読みましたが、各クラスター内のポイントのリストを取得する他の方法はありますか? ラベルにリレーションを使用できると読みましたが、実際にこれを実装する方法がわかりません...
私を正しい方向に導くことができるコメント、または ELKI の DBSCAN の結果セットを反復処理するためのコードの提案は、本当に歓迎されます! また、コードで ELKI の OPTICSxi を使用しました。これらの結果についてさらに質問がありますが、それは別の投稿に譲ると思います。
cluster-analysis - ELKIの距離機能を使う
これは、緯度経度座標でユークリッド距離を使用すると正しい結果が得られないとコメントした前の質問からのフォローアップです。ELKIが地理データを有効にするというドキュメントを読みました、つまり int その距離関数で、さまざまなクラスタリング アルゴリズムに存在します。ELKI のユーザー インターフェイスには、デフォルトの距離関数 (ユークリッド) をより適したものに置き換えるオプションがあることがわかります。また、その場合、データがどのように投影されるかを ELKI に伝える必要があるため、データムを提供する必要があることもわかります。UI での私のオプションは、(x,y) 座標を使用しているため "geo.LngLatDistanceFunction" を使用し、データは epsg:4326 にあるため "WGS84SpheroidEarthModel" を使用することです。それに応じてJavaでアルゴリズムをパラメータ化しようとしていますが、その方法がわかりません:次のようにパラメータを初期化すると:
距離関数をこのように設定できますか?
geo.model はどうですか? (私はこれについて手がかりがありません)
cluster-analysis - ELKI で地理距離機能を使用する
ELKI を使用していくつかの地理空間データ (緯度と経度のペア) をマイニングしていますが、適切なデータ型とアルゴリズムを使用することに非常に関心があります。私のアルゴリズムのパラメータライザーで、次のようにジオ関数 (x、y データを使用しているため、LngLatDistanceFunction) によってデフォルトの距離関数を変更しようとしました。
しかし、結果は非常に驚くべきものです。次の例のように、繰り返されるポイントのクラスターが作成されます。
(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 [
これは、この例のイメージです。
非地理距離を使用したかどうか(たとえば、マンハッタン):
私のコードに何か問題があるのだろうか。
次のように、アルゴリズムをデータベースで直接実行しています。
そして、凸包を構築しながら、結果をループで反復処理します。
各 ID をポイントにマップするには、データベースの読み取り時に初期化したハッシュマップを使用します。このコードを追加する理由は、アルゴリズムに渡したり、アルゴリズムから読み取ったりする構造に関して何か間違ったことをしている可能性があると思われるためです。これを解決するのに役立つコメントがあれば、事前に感謝します。ELKI は非常に効率的で洗練されたライブラリだと思いますが、私のような単純なケースを説明する例を見つけるのに苦労しています。
cluster-analysis - ELKI DBSCAN クラスタリングの結果を表示する方法
約 14,000 個の GPS ポイントの DBSCAN クラスタリングに ELKI を使用しています。正常に動作していますが、クラスター内のポイント数などのクラスターに関する情報を確認したいです。
algorithm - DBSCAN クラスタリング アルゴリズムを実装するには?
DBSCANを実装しようとしていますが、その背後にある考え方がわかりません。データ全体を 1 つずつ調べて、近い隣人のために新しいクラスターを作成すると、常に多くのクラスターが得られます。最初のポイントの近くの隣人をチェックし、十分な数の隣人 (> MinPts
) を見つけ、それらのクラスターを作成し、次のポイントに移動し、隣人をチェックし (既にクラスター内にある隣人を見つけることもあります)、それらの新しいクラスターを作成するとします。 . 等々。したがって、いくつかのポイントが複数のクラスターに追加されます...したがって、多くのクラスターが作成されます。
誰かがこのアルゴリズムがどのように機能するか説明できますか? 私はそれについてオンラインで多くの情報を見つけませんでした。
r-tree - ELKI DBSCAN R* ツリー インデックス
MiniGUI では、 が表示されますdb.index
。tree.spatial.rstarvariants.rstar.RStartTreeFactory
Javaコード経由で設定するにはどうすればよいですか?
私は実装しました:
addParameter()
関数tree.spatial...RStarTreeFactory
クラスの 2 番目のパラメーターが見つかりません
私は得てNullPointerException
います。私はRStarTreeFactory.class
正しく使用しましたか?
dbscan - ELKI DBSCAN RESULT 構造体
elki dbscan によって返される各クラスターにあるポイントを取得できません。
出力は次のとおりです。
ELKI で DBSCAN を実行しています。それでも、クラスター内のポイントを見るために移動することはできません。配列に格納したい。elki が格納するクラスタの構造は?? ハマった !!
java - ELKI DBSCAN : dbc.parser を設定するには?
DBSCAN クラスタリングを行っていますが、緯度経度とは別に、クラスター結果で確認したい列がもう 1 つあります。たとえば、データは次のようになります。
minigui でparser.labelindices
2 に設定してタスクを実行すると、出力は次のようになります。
そのため、 として渡した 3 列目にまだ接続されていlabel
ます。緯度と経度だけを渡してクラスタリングの結果を確認しましたが、まったく同じです。したがって、列を「ラベル」として渡すことで、クラスターの結果で緯度が長い列を取得できます。
これをJavaコードで使用したい
しかし、これはNullPointerException
. MiniGui ではdbc.parser
デフォルトNumberVectorLabelParser
です。したがって、これはうまくいくはずです。私は何が欠けていますか?
cluster-analysis - ELKI DBSCAN の入力として Java 配列を渡す
Java コードを使用して DBSCAN に ELKI を使用することができましたが、他のどのツールよりも驚くほど高速です。これまで、私は CSV ファイルを操作し、以下を使用してそれを入力として与えていました。
CSV ファイルの代わりに (緯度、経度、タイムスタンプ) の配列を入力として渡す方法を知りたいです。私はそれを理解することができません。
machine-learning - GPS データのクラスタリング アルゴリズム
特定の都市のポイントの gps 座標で構成されるデータ セットがあります (たとえば、サンフランシスコを取り上げます)。座標を画像のようなグループにまとめたい:
k-means、DBSCAN、またはその他のクラスタリング アルゴリズムを使用する必要がありますか? 最初にクラスターを見つけてから境界点を見つけて境界を描画する必要がありますか?