2016-08-31 13 views
-3

場所に加えて他の機能をDBSCANに適用できますか?それが利用可能な場合はどのようにRまたはスパークを通じて行うことができますか?DBSCAN追加機能を使用したクラスタリング

緯度、経度、およびスコア(私はスペースフィーチャに加えてクラスタリングしたいフィーチャ)の3つの列のRテーブルを準備しました。DBSCANを次のRコードで実行しようとすると、次のプロットが表示されます。アルゴリズムは、...列の各ペア(ロング、緯度)、(長い、スコア)、(緯度、スコア)により、クラスタを作ることを告げる

私のRコード:

df = read.table("/home/ahmedelgamal/Desktop/preparedData") 
var = dbscan(df, eps = .013) 
plot(x = var, data = df) 

とプロット私は得る: enter image description here

+1

何を試しましたか?あなたは何をAhmedと苦労していますか?私たちは助けが大好きですが、それ以上のものが必要です。 – Mfusiki

+0

私はtryとその結果を追加して質問を編集しました。 –

答えて

2

あなたはプロットを誤解しています。

プロットごとに1つの結果は得られませんが、すべてのプロットは同じクラスターを示し、異なる属性でのみ表示されます。

でも、私の知る限り、R版はユークリッドの距離でしかないという問題があります。

(lat[i]-lat[j])^2+(lon[i]-lon[j])^2+(score[i]-score[j])^2 <= eps^2の場合、現在のコードでは、ポイントは隣接しています。 1.緯度と経度はユークリッドではなく、代わりにハバーズインを使用する必要があります。2.あなたの追加属性はよりもはるかに大きいので、ほとんどゼロ点のクラスターポイントがになります。スコア属性が歪んでいる。

一般化されたDBSCANを使用しているはずです。それらのhaversine距離がより小さい場合、点は同様である。 (歪みのために座標ではなく地理的な距離を測定したい)場合は、ファクタの値が1.1以下である(つまり、score[y]/score[x]を比較するか、ログスペースで作業する)かどうかによって異なります。 の両方とも conditipnsを保持したいので、通常のユークリッドDBSCANの実装ではまだ十分ではありませんが、のを許可するGeneralized DBSCANが必要です。代わりにGeneralized DBSCANの実装を探してください(私はELKIの中にあなたがSparkからアクセスできるかもしれないと信じています)、または自分で実装してください。それほど難しいことではありません。

次のランタイムがあなたのために問題がない場合、あなたはおそらく、任意の距離行列をベースDBSCANを使用することができますし、単にバイナリ距離行列「ハック」:

  1. 計算半正矢距離を
  2. 計算スコアの非類似度
  3. 距離= 0がバイナリ行列であるので、半正矢<距離閾値およびスコア相違に別段<スコア閾値、事前計算距離マトリックスとEPS 1.
  4. ランDBSCAN = 0.5(、ない場合チャンeps)

これはかなり高速ですが、O(n^2)のメモリが必要です。私の経験では、ELKIのインデックスは大きなデータを持っていれば良いスピードアップをもたらし、メモリや時間が足りなくなったら試してみる価値があります。

0

データを拡大縮小する必要があります。 V3はV1とV2の範囲よりもはるかに広い範囲を持っているため、現在DBSCANはV3をほとんど無視しています。

関連する問題