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仅使用线性内存。 有关更多详细信息,请参见下面的注释。更多信息请参见 用户指南 。
- Parameters:
- epsfloat, default=0.5
两个样本之间的最大距离,使得一个样本被认为是另一个样本的邻域。 这不是聚类内点之间距离的最大界限。这是最重要的DBSCAN参数, 需要根据您的数据集和距离函数适当选择。
- min_samplesint, default=5
邻域中点的样本数(或总权重),使得一个点被认为是核心点。 这包括点本身。如果
min_samples
设置为较高值,DBSCAN将找到更密集的聚类, 而如果设置为较低值,找到的聚类将更稀疏。- metricstr, or callable, default=’euclidean’
在特征数组中计算实例之间距离时使用的度量。如果度量是字符串或可调用对象, 它必须是
sklearn.metrics.pairwise_distances
的度量参数允许的选项之一。 如果度量是 “precomputed”,则假定 X 是距离矩阵且必须是方阵。 X 可以是 稀疏图 ,在这种情况下,只有 “非零” 元素可能被认为是DBSCAN的邻居。Added in version 0.17: metric precomputed 接受预计算的稀疏矩阵。
- metric_paramsdict, default=None
度量函数的额外关键字参数。
Added in version 0.19.
- algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=’auto’
NearestNeighbors模块用于计算点对距离和寻找最近邻居的算法。 有关详细信息,请参见NearestNeighbors模块文档。
- leaf_sizeint, default=30
传递给BallTree或cKDTree的叶大小。这会影响构建和查询的速度, 以及存储树所需的内存。最佳值取决于问题的性质。
- pfloat, default=None
用于计算点之间距离的Minkowski度量的幂。如果为None,则
p=2
(相当于欧几里得距离)。- n_jobsint, default=None
要运行的并行作业数。
None
表示1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。有关更多详细信息,请参见 Glossary 。
- Attributes:
- core_sample_indices_ndarray of shape (n_core_samples,)
核心样本的索引。
- components_ndarray of shape (n_core_samples, n_features)
通过训练找到的每个核心样本的副本。
- labels_ndarray of shape (n_samples)
为给定数据集中的每个点分配的聚类标签。 噪声样本被分配标签 -1。
- n_features_in_int
在 fit 期间看到的特征数。
Added in version 0.24.
- feature_names_in_ndarray of shape (
n_features_in_
,) 在 fit 期间看到的特征名称。仅当
X
的所有特征名称均为字符串时定义。Added in version 1.0.
See also
OPTICS
在多个eps值下类似的聚类。我们的实现针对内存使用进行了优化。
Notes
有关示例,请参见 examples/cluster/plot_dbscan.py 。
此实现批量计算所有邻域查询,这增加了内存复杂度到 O(n.d),其中 d 是平均邻居数, 而原始DBSCAN的内存复杂度为 O(n)。在查询这些最近邻域时,可能会吸引更高的内存复杂度, 具体取决于
algorithm
。避免查询复杂度的一种方法是使用
NearestNeighbors.radius_neighbors_graph
以mode='distance'
预计算稀疏邻域块,然后在此处使用metric='precomputed'
。另一种减少内存和计算时间的方法是去除(近)重复点并使用
sample_weight
代替。OPTICS
提供了类似的聚类,内存使用更低。References
Ester, M., H. P. Kriegel, J. Sander, and X. Xu, “A Density-Based Algorithm for Discovering Clusters in Large Spatial Databases with Noise” . In: 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.
Examples
>>> 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聚类从特征或距离矩阵。
- Parameters:
- X{array-like, sparse matrix} 形状为 (n_samples, n_features) 或 (n_samples, n_samples)
训练实例进行聚类,或实例之间的距离(如果
metric='precomputed'
)。如果提供稀疏矩阵,它将被转换为稀疏的csr_matrix
。- y忽略
未使用,此处存在是为了API一致性约定。
- sample_weightarray-like 形状为 (n_samples,),默认=None
每个样本的权重,使得权重至少为
min_samples
的样本本身是一个核心样本;权重为负的样本可能会抑制其eps-邻居成为核心样本。注意权重是绝对的,默认为1。
- Returns:
- selfobject
返回已拟合的自身实例。
- fit_predict(X, y=None, sample_weight=None)#
计算从数据或距离矩阵中聚类并预测标签。
- Parameters:
- X{array-like, sparse matrix} 形状为 (n_samples, n_features) 或 (n_samples, n_samples)
要聚类的训练实例,或者如果
metric='precomputed'
,则是实例之间的距离。如果提供稀疏矩阵,它将被转换为稀疏的csr_matrix
。- y忽略
未使用,此处存在是为了通过约定保持API一致性。
- sample_weight形状为 (n_samples,) 的类数组,默认=None
每个样本的权重,使得权重至少为
min_samples
的样本本身是一个核心样本;权重为负的样本可能会抑制其eps邻居成为核心样本。注意权重是绝对的,默认为1。
- Returns:
- labels形状为 (n_samples,) 的 ndarray
聚类标签。噪声样本被赋予标签 -1。
- get_metadata_routing()#
获取此对象的元数据路由。
请查看 用户指南 以了解路由机制的工作原理。
- Returns:
- routingMetadataRequest
MetadataRequest
封装的 路由信息。
- get_params(deep=True)#
获取此估计器的参数。
- Parameters:
- deepbool, 默认=True
如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。
- Returns:
- paramsdict
参数名称映射到它们的值。
- set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') DBSCAN #
Request metadata passed to the
fit
method.Note that this method is only relevant if
enable_metadata_routing=True
(seesklearn.set_config
). Please see User Guide on how the routing mechanism works.The options for each parameter are:
True
: metadata is requested, and passed tofit
if provided. The request is ignored if metadata is not provided.False
: metadata is not requested and the meta-estimator will not pass it tofit
.None
: metadata is not requested, and the meta-estimator will raise an error if the user provides it.str
: metadata should be passed to the meta-estimator with this given alias instead of the original name.
The default (
sklearn.utils.metadata_routing.UNCHANGED
) retains the existing request. This allows you to change the request for some parameters and not others.Added in version 1.3.
Note
This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a
Pipeline
. Otherwise it has no effect.- Parameters:
- sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED
Metadata routing for
sample_weight
parameter infit
.
- Returns:
- selfobject
The updated object.