DBSCAN#
- class sklearn.cluster.DBSCAN(eps=0.5, *, min_samples=5, metric='euclidean', metric_params=None, algorithm='auto', leaf_size=30, p=None, n_jobs=None)[原始碼]#
從向量陣列或距離矩陣執行 DBSCAN 分群。
DBSCAN - 具有雜訊的應用程式密度空間群集法。尋找高密度的核心樣本並從它們擴展群集。適用於包含相似密度群集的資料。
此實作的最壞情況記憶體複雜度為 \(O({n}^2)\),當
eps
參數較大且min_samples
較小時可能會發生,而原始 DBSCAN 僅使用線性記憶體。有關更多詳細資訊,請參閱下面的「注意事項」。請在使用者指南中閱讀更多內容。
- 參數:
- eps浮點數,預設值=0.5
兩個樣本之間的最大距離,若其中一個被視為在另一個的鄰域中。這並非群集中點之間距離的最大界限。這是最重要的 DBSCAN 參數,需要針對您的資料集和距離函數適當選擇。
- min_samples整數,預設值=5
一個點被視為核心點的鄰域中的樣本數(或總權重)。這包括點本身。如果將
min_samples
設定為較高的值,DBSCAN 將找到密度較高的群集,而如果將其設定為較低的值,則找到的群集將更稀疏。- metric字串或可呼叫物件,預設值='euclidean'
在計算特徵陣列中實例之間的距離時要使用的度量。如果度量是字串或可呼叫物件,則它必須是
sklearn.metrics.pairwise_distances
為其度量參數所允許的選項之一。如果度量為「precomputed」,則假設 X 為距離矩陣且必須為方形。X 可以是稀疏圖,在這種情況下,只有「非零」元素才能被視為 DBSCAN 的鄰居。0.17 版本新增: 度量 precomputed 接受預先計算的稀疏矩陣。
- metric_params字典,預設值=None
度量函數的額外關鍵字引數。
於 0.19 版本新增。
- algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’},預設值='auto'
NearestNeighbors 模組用於計算點對點距離並尋找最近鄰的演算法。有關詳細資訊,請參閱 NearestNeighbors 模組文件。
- leaf_size整數,預設值=30
傳遞給 BallTree 或 cKDTree 的葉節點大小。這會影響建構和查詢的速度,以及儲存樹狀結構所需的記憶體。最佳值取決於問題的性質。
- p浮點數,預設值=None
用於計算點之間距離的 Minkowski 度量的冪。如果為 None,則
p=2
(相當於歐幾里得距離)。- n_jobs整數,預設值=None
要執行的並行作業數。
None
表示 1,除非在joblib.parallel_backend
內容中。-1
表示使用所有處理器。有關更多詳細資訊,請參閱詞彙表。
- 屬性:
- core_sample_indices_形狀為 (n_core_samples,) 的 ndarray
核心樣本的索引。
- components_形狀為 (n_core_samples, n_features) 的 ndarray
訓練找到的每個核心樣本的副本。
- labels_形狀為 (n_samples) 的 ndarray
提供給 fit() 的資料集中每個點的群集標籤。雜訊樣本的標籤為 -1。
- n_features_in_整數
在fit期間看到的特徵數量。
於 0.24 版本新增。
- feature_names_in_形狀為 (
n_features_in_
,) 的 ndarray 在 fit 期間看到的特徵名稱。僅當
X
具有全部為字串的特徵名稱時才會定義。於 1.0 版本新增。
另請參閱
OPTICS
在多個 eps 值處的相似群集。我們的實作針對記憶體使用量進行了最佳化。
注意事項
有關範例,請參閱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, 「A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise」。出自: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 revisited, revisited: why and how you should (still) use DBSCAN.」 ACM Transactions on Database Systems (TODS), 42(3), 19.
範例
>>> from sklearn.cluster import DBSCAN >>> import numpy as np >>> X = np.array([[1, 2], [2, 2], [2, 3], ... [8, 7], [8, 8], [25, 80]]) >>> clustering = DBSCAN(eps=3, min_samples=2).fit(X) >>> clustering.labels_ array([ 0, 0, 0, 1, 1, -1]) >>> clustering DBSCAN(eps=3, min_samples=2)
- fit(X, y=None, sample_weight=None)[來源]#
從特徵或距離矩陣執行 DBSCAN 群集。
- 參數:
- X形狀為 (n_samples, n_features) 或 (n_samples, n_samples) 的 {類陣列、稀疏矩陣}
要群集的訓練實例,如果
metric='precomputed'
,則是實例之間的距離。如果提供了稀疏矩陣,它將被轉換為稀疏的csr_matrix
。- y已忽略
未使用,為了 API 一致性而按照慣例存在於此處。
- sample_weight形狀為 (n_samples,) 的類陣列,預設值=None
每個樣本的權重,權重至少為
min_samples
的樣本本身即為核心樣本;權重為負數的樣本可能會抑制其 eps 鄰居成為核心樣本。請注意,權重是絕對值,預設為 1。
- 回傳值:
- self物件
回傳已擬合的 self 實例。
- fit_predict(X, y=None, sample_weight=None)[原始碼]#
從資料或距離矩陣計算集群並預測標籤。
- 參數:
- X形狀為 (n_samples, n_features) 或 (n_samples, n_samples) 的 {類陣列、稀疏矩陣}
要群集的訓練實例,如果
metric='precomputed'
,則是實例之間的距離。如果提供了稀疏矩陣,它將被轉換為稀疏的csr_matrix
。- y已忽略
未使用,為了 API 一致性而按照慣例存在於此處。
- sample_weight形狀為 (n_samples,) 的類陣列,預設值=None
每個樣本的權重,權重至少為
min_samples
的樣本本身即為核心樣本;權重為負數的樣本可能會抑制其 eps 鄰居成為核心樣本。請注意,權重是絕對值,預設為 1。
- 回傳值:
- labels形狀為 (n_samples,) 的 ndarray
集群標籤。雜訊樣本的標籤為 -1。
- get_metadata_routing()[原始碼]#
取得此物件的中繼資料路由。
請查看 使用者指南 了解路由機制的運作方式。
- 回傳值:
- routingMetadataRequest
一個封裝路由資訊的
MetadataRequest
。
- get_params(deep=True)[原始碼]#
取得此估算器的參數。
- 參數:
- deepbool,預設值為 True
如果為 True,將回傳此估算器和所包含的子物件(也是估算器)的參數。
- 回傳值:
- paramsdict
參數名稱對應到它們的值。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') DBSCAN [原始碼]#
要求傳遞給
fit
方法的中繼資料。請注意,此方法僅在
enable_metadata_routing=True
時相關(請參閱sklearn.set_config
)。請參閱 使用者指南 了解路由機制的運作方式。每個參數的選項為
True
:請求中繼資料,並在提供時傳遞給fit
。如果未提供中繼資料,則會忽略請求。False
:不請求中繼資料,且元估算器不會將其傳遞給fit
。None
:不請求中繼資料,且如果使用者提供,元估算器將會引發錯誤。str
:中繼資料應以給定的別名傳遞給元估算器,而不是原始名稱。
預設值(
sklearn.utils.metadata_routing.UNCHANGED
)會保留現有的請求。這允許您變更某些參數的請求,而不變更其他參數的請求。在 1.3 版中新增。
注意
僅當此估算器用作元估算器的子估算器時,此方法才相關,例如,在
Pipeline
中使用。否則沒有任何作用。- 參數:
- sample_weightstr、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED
fit
中sample_weight
參數的中繼資料路由。
- 回傳值:
- self物件
已更新的物件。