3

ポイントのセットがあります。それらのジオメトリ (SRID: 4326) はデータベースに保存されます。このポイントを DBSCAN でクラスター化することを目的としたコードが提供されました。パラメータは次のように設定されています: eps=1000, min_points=1.

1000 メートル未満のクラスターを取得します。私は、距離が 1000 メートル未満の 2 つのポイントが同じクラスターに属すると考えていました。イプシロンは本当にメートルですか?

コードは次のとおりです。

    self.algorithm='DBSCAN'
    X=self.data[:,[2,3]]
    if self.debug==True:
        print 'Nbr of Points: %d'% len(X)
    # print X.shape
    # print dist_matrix.shape
    D = distance.squareform(distance.pdist(X,'euclidean'))
    # print dist_matrix
    # S = 1 - (D / np.max(D))
    db = DBSCAN(eps, min_samples).fit(D)
    self.core_samples = db.core_sample_indices_
    self.labels = db.labels

目的は、それを実行する別の方法を見つけることではなく、実際に eps の価値を理解することです。距離で表すもの。Min_sample が 1 に設定されているのは、実際に 1 サンプルのサイズのクラスターを持つことを受け入れるためです。

4

1 に答える 1

3

これは実装によって異なります。

距離関数は何でも返すことができます。メートル、ミリメートル、ヤード、キロ、マイル、度など... しかし、距離の計算に使用する関数を共有していませんでした! 私が間違っていなければSRID: 4326、距離の計算については何も意味しません。

sklearn"haversine"で使用される は、メートルではなく、度を使用しているようです。

いずれにせよmin_points=1ナンセンスです。クエリ ポイントが含まれているため、すべてのポイント自体がクラスターです。を使用min_points <= 2すると、DBSCAN の結果は単一結合クラスタリングになります。密度ベースのクラスタリングを取得するには、より高い値を選択して実際の密度を取得する必要があります。

ELKIの DBSCANを使用することもできます。彼らの Java ソースによると、彼らの距離関数はメートルを使用しますが、R* ツリー インデックスもこの距離で加速された範囲クエリを可能にし、大幅なスピードアップをもたらします (O(n log n)代わりにO(n^2))。

于 2014-06-06T12:14:07.127 に答える