簡體   English   中英

Python中的DBSCAN:意外結果

[英]DBSCAN in Python: Unexpected result

我正在嘗試通過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])

這意味着第二點到第一點和第三點的距離為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.])

為什么會有集群?

我認為實現可能只是假設您的距離矩陣是數據本身

請參閱:通常,您不會為DBSCAN計算完整的距離矩陣,而是使用數據索引來加快鄰居搜索的速度。

從1分鍾的Google來看,考慮添加metric="precomputed" ,因為:

配合(X)

X:樣本之間的距離數組或要素數組。 除非將度量標准指定為“預先計算”,否則該數組將被視為要素數組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM