[英]How to define a range of values for the eps parameter of sklearn.cluster.DBSCAN?
[英]sklearn.cluster.DBSCAN gives unexpected result
我正在使用DBSCAN方法對圖像進行聚類,但是會產生意外的結果。 假設我有10張圖片。
首先,我使用cv2.imread
循環讀取圖像。 然后,我計算每個圖像之間的結構相似性指數。 在那之后,我有一個像這樣的矩陣:
[
[ 1. -0.00893619 0. 0. 0. 0.50148778 0.47921832 0. 0. 0. ]
[-0.00893619 1. 0. 0. 0. 0.00996088 -0.01873205 0. 0. 0. ]
[ 0. 0. 1. 0.57884212 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0.57884212 1. 0. 0. 0. 0. 0. 0. ]
[ 0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]
[ 0.50148778 0.00996088 0. 0. 0. 1. 0.63224396 0. 0. 0. ]
[ 0.47921832 -0.01873205 0. 0. 0. 0.63224396 1. 0. 0. 0. ]
[ 0. 0. 0. 0. 0. 0. 0. 1. 0.77507487 0.69697053]
[ 0. 0. 0. 0. 0. 0. 0. 0.77507487 1. 0.74861881]
[ 0. 0. 0. 0. 0. 0. 0. 0.69697053 0.74861881 1. ]]
看起來不錯。 然后,我將簡單地調用DBSCAN:
db = DBSCAN(eps=0.4, min_samples=3, metric='precomputed').fit(distances)
labels = db.labels_
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0)
結果是
[0 0 0 0 0 0 0 0 0 0]
我做錯了什么? 為什么將所有圖像都放在一個群集中?
DBSCAN通常假定不相似 (距離)而不是相似性。 也可以使用相似性閾值來實現(請參見通用DBSCAN)
問題是我錯誤地計算了距離矩陣-主對角線上的條目全為零。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.