dbscan#
- sklearn.cluster.dbscan(X, eps=0.5, *, min_samples=5, metric='minkowski', metric_params=None, algorithm='auto', leaf_size=30, p=2, sample_weight=None, n_jobs=None)[原始碼]#
從向量陣列或距離矩陣執行 DBSCAN 分群。
請參閱使用者指南以了解更多資訊。
- 參數:
- X{類陣列, 稀疏 (CSR) 矩陣},形狀為 (n_samples, n_features) 或 (n_samples, n_samples)
特徵陣列,或是當
metric='precomputed'
時,樣本間距離的陣列。- epsfloat,預設值=0.5
兩個樣本之間的最大距離,若要被視為彼此的鄰居。這不是叢集內點之間距離的最大界限。這是最重要的 DBSCAN 參數,必須針對您的資料集和距離函數適當選擇。
- min_samplesint,預設值=5
一個點要被視為核心點,鄰域中所需的樣本數(或總權重)。這包含該點本身。
- metricstr 或可呼叫物件,預設值=’minkowski’
在特徵陣列中計算實例間距離時要使用的度量。如果 metric 是字串或可呼叫物件,則它必須是
sklearn.metrics.pairwise_distances
其 metric 參數所允許的選項之一。如果 metric 是 “precomputed”,則 X 會被假設為距離矩陣,且在擬合期間必須是方形的。X 可以是稀疏圖,在這種情況下,只有「非零」元素可被視為鄰居。- metric_paramsdict,預設值=None
度量函數的其他關鍵字參數。
在 0.19 版本中新增。
- algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’},預設值=’auto’
NearestNeighbors 模組要用來計算逐點距離和尋找最近鄰居的演算法。請參閱 NearestNeighbors 模組文件以了解詳細資訊。
- leaf_sizeint,預設值=30
傳遞給 BallTree 或 cKDTree 的葉節點大小。這可能會影響建構和查詢的速度,以及儲存樹狀結構所需的記憶體。最佳值取決於問題的性質。
- pfloat,預設值=2
用於計算點之間距離的閔可夫斯基度量的次方。
- sample_weight形狀為 (n_samples,) 的類陣列,預設值=None
每個樣本的權重,使得權重至少為
min_samples
的樣本本身即為核心樣本;權重為負的樣本可能會抑制其 eps 鄰居成為核心樣本。請注意,權重是絕對的,且預設值為 1。- n_jobsint,預設值=None
用於鄰居搜尋的平行工作數。
None
表示 1,除非是在joblib.parallel_backend
環境中。-1
表示使用所有處理器。請參閱詞彙表以了解更多詳細資訊。如果使用預先計算的距離,則無法進行平行執行,因此 n_jobs 將不會有任何影響。
- 返回:
- core_samples形狀為 (n_core_samples,) 的 ndarray
核心樣本的索引。
- labels形狀為 (n_samples,) 的 ndarray
每個點的叢集標籤。雜訊樣本會被賦予標籤 -1。
注意事項
例如,請參閱DBSCAN 分群演算法的示範。
此實作批量計算所有鄰域查詢,這將記憶體複雜度增加到 O(n.d),其中 d 是平均鄰居數,而原始 DBSCAN 的記憶體複雜度為 O(n)。在查詢這些最近鄰居時,可能會產生更高的記憶體複雜度,具體取決於
algorithm
。避免查詢複雜性的一種方法是使用
NearestNeighbors.radius_neighbors_graph
和mode='distance'
,分塊預先計算稀疏鄰域,然後在此處使用metric='precomputed'
。減少記憶體和計算時間的另一種方法是移除(接近)重複的點,並改用
sample_weight
。OPTICS
提供具有較低記憶體使用量的類似分群。參考資料
Ester, M., H. P. Kriegel, J. Sander, and X. Xu, “一種用於在具有雜訊的大型空間資料庫中發現叢集的基於密度的演算法”。出自:Proceedings of the 2nd International Conference on Knowledge Discovery and Data Mining, Portland, OR, AAAI Press, pp. 226-231. 1996
Schubert, E., Sander, J., Ester, M., Kriegel, H. P., & Xu, X. (2017). “重新檢視 DBSCAN,重新檢視:您應該(仍然)使用 DBSCAN 的原因和方式。” ACM Transactions on Database Systems (TODS), 42(3), 19.
範例
>>> from sklearn.cluster import dbscan >>> X = [[1, 2], [2, 2], [2, 3], [8, 7], [8, 8], [25, 80]] >>> core_samples, labels = dbscan(X, eps=3, min_samples=2) >>> core_samples array([0, 1, 2, 3, 4]) >>> labels array([ 0, 0, 0, 1, 1, -1])