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.])
なぜクラスターがあるのですか?