2

scikit-learn で DBSCAN の実装を理解しようとしているのですが、うまくいきません。ここに私のデータサンプルがあります:

X = [[0,0],[0,1],[1,1],[1,2],[2,2],[5,0],[5,1],[5,2],[8,0],[10,0]]

次に、提供された例のように D を計算します

D = distance.squareform(distance.pdist(X))

D各点と他のすべての点の間の距離を含む行列を返します。したがって、対角線は常に 0 です。

次に、DBSCAN を次のように実行します。

 db = DBSCAN(eps=1.1, min_samples=2).fit(D)

eps = 1.1ドキュメントをよく理解していれば、距離が 1.1 以下のポイントがクラスター (コア) と見なされることを意味します。

D[1]以下を返します。

>>> D[1]
array([  1.        ,   0.        ,   1.        ,   1.41421356,
     2.23606798,   5.09901951,   5.        ,   5.09901951,
     8.06225775,  10.04987562])

これは、2 番目の点から 1 番目と 3 番目の点までの距離が 1 であることを意味します。ということで、クラスターを構築してくれると期待しているのですが……。

>>> db.core_sample_indices_
[]

これは、コアが見つからないことを意味しますよね? 残りの 2 つの出力は次のとおりです。

>>> db.components_
array([], shape=(0, 10), dtype=float64)
>>> db.labels_
array([-1., -1., -1., -1., -1., -1., -1., -1., -1., -1.])

なぜクラスターがあるのですか?

4

1 に答える 1

4

実装では、距離行列がデータ自体であると想定しているだけかもしれません。

参照: 通常、DBSCAN の全距離行列を計算することはありませんが、近隣検索を高速化するためにデータ インデックスを使用します。

1 分間の Google から判断すると、次の理由から を追加することを検討しmetric="precomputed"てください。

フィット(X)

X: サンプル間の距離の配列、または特徴配列。メトリックが「事前計算済み」として指定されていない限り、配列は特徴配列として扱われます。

于 2013-04-10T11:11:30.877 に答える