2016-09-06 3 views
1

本来、私の元のデータのサブセットにユークリッド距離を持つDBSCANアルゴリズム(sklearn)を適用しました。私はクラスターを見つけましたが、すべては問題ありません。私が分析を実行しなかったものから十分に離れた値だけを保持したいという事実を除いては、私はそのような新しいものをテストするための新しい距離を持っていて、私はそれを行う方法を理解したかったなし多数の入れ子になったループ。絵で効率的なフィルタリングが見つかった後、クラスタの内側/内側にある -

:赤いものは、私は近くになりたくない先のポイントであるのに対し、

enter image description here

私見つかったクラスタは青色です。十字は、私が指定した新しい距離内にあるように刻まれたクラスターに属するポイントです。

for i in red_points: 
    for j in blu_points: 
     if dist(i,j) < given_dist: 
      original_dataframe.remove(j) 

私はベクトル化された方法がない信じることを拒否:

今、同じくらい私は一種の何かを行うことができます。また、私は上に述べたように操作するために巨大なテーブルを持っているので、CPUを避けるために余裕がありません。あなたがおおよその答えを受け入れることができれば、あなたはKDとのより良い行うことができます http://scikit-learn.org/stable/modules/generated/sklearn.metrics.pairwise.pairwise_distances.html

任意およびすべての提案は、あなたが正確な答えが必要な場合は、最速の実装がsklearnのペアごとの距離計算である必要があり

答えて

1

もちろん、これをベクトル化することはできますが、それでもO(n * m)になります。より良い近隣探索アルゴリズムはベクトル化されない。例えばkd-treeとボールツリー。

両方ともsklearnで利用でき、DBSCANモジュールで使用されます。 sklearn.neighborsパッケージをご覧ください。

+0

でした! – Asher11

関連する問題