2014-10-31 46 views
2

我一直在嘗試使用scikit來實現DBSCAN,至今未能確定epsilon和min_sample的值會給我一大堆的簇。我試圖在距離矩陣求出平均值,並用於對平均的任一側的值,但還沒有得到簇的數目令人滿意:Scikit DBSCAN eps和min_sample值的確定

輸入:

db=DBSCAN(eps=13.0,min_samples=100).fit(X) 
labels = db.labels_ 

# Number of clusters in labels, ignoring noise if present. 
n_clusters_ = len(set(labels)) - (1 if -1 in labels else 0) 
print('Estimated number of clusters: %d' % n_clusters_) 

輸出:

Estimated number of clusters: 1 

輸入:

db=DBSCAN(eps=27.0,min_samples=100).fit(X) 

輸出:

Estimated number of clusters: 1 

此外所以其它信息:

The average distance between any 2 points in the distance matrix is 16.8354 
the min distance is 1.0 
the max distance is 258.653 

另外,X中的代碼傳遞不是距離矩陣但特徵向量的矩陣。 所以請告訴我如何確定這些參數

+1

你有多少個樣品? – Phani 2014-10-31 02:12:27

回答

2

嘗試將min_samples參數更改爲較低的值。該參數影響每個羣集形成的最小大小。可能是,可能形成的簇都是小尺寸的,而且你現在使用的參數對於它們的形成來說太高了。

4
  1. 繪製k距離圖,並在那裏尋找膝蓋。正如DBSCAN文章中所建議的那樣。 (您的min_samples可能太高 - 那麼您可能不會在100-距離圖表中出現拐點。)

  2. 可視化您的數據。如果您無法直觀地看到羣集,則可能沒有羣集。 DBSCAN不能被強制產生任意數量的簇。如果您的數據集是高斯分佈,則假設僅爲