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)[source]#

基于向量数组或距离矩阵执行 DBSCAN 聚类。

DBSCAN——基于密度的带噪声应用空间聚类。查找高密度核心样本并从中扩展聚类。适用于包含相似密度聚类的数据。

此实现的最坏情况内存复杂度为 \(O({n}^2)\),当 eps 参数较大且 min_samples 较小时可能会出现这种情况,而原始 DBSCAN 算法仅使用线性内存。更多详情,请参见下面的注释。

用户指南 中了解更多信息。

参数:
epsfloat,默认为 0.5

两个样本之间被认为是彼此邻域的最大距离。这不是集群内点距离的最大界限。这是 DBSCAN 中最重要的参数,需要根据您的数据集和距离函数进行适当选择。

min_samplesint,默认为 5

一个点被视为核心点所需的邻域样本数(或总权重)。这包括点本身。如果将 min_samples 设置为较高的值,DBSCAN 将找到更密集的集群;如果将其设置为较低的值,则找到的集群将更加稀疏。

metricstr 或 callable,默认为 'euclidean'

计算特征数组中实例之间距离时使用的度量。如果 metric 是字符串或可调用对象,它必须是 sklearn.metrics.pairwise_distances 的 metric 参数允许的选项之一。如果 metric 为“precomputed”,则假定 X 为距离矩阵且必须为方阵。X 可以是 稀疏图,在这种情况下,只有“非零”元素才能被视为 DBSCAN 的邻居。

版本 0.17 中新增: metric precomputed 支持接受预计算的稀疏矩阵。

metric_paramsdict,默认为 None

度量函数的其他关键字参数。

版本 0.19 中新增。

algorithm{'auto', 'ball_tree', 'kd_tree', 'brute'},默认为 'auto'

由 NearestNeighbors 模块用于计算逐点距离和查找最近邻的算法。有关详细信息,请参阅 NearestNeighbors 模块文档。

leaf_sizeint,默认为 30

传递给 BallTree 或 cKDTree 的叶子大小。这会影响构建和查询的速度,以及存储树所需的内存。最佳值取决于问题的性质。

pfloat,默认为 None

用于计算点之间距离的 Minkowski 度量的幂。如果为 None,则 p=2(等效于欧几里得距离)。

n_jobsint,默认为 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_int

拟合期间看到的特征数量。

版本 0.24 中新增。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

拟合期间看到的特征名称。仅当 X 的特征名称全部为字符串时才定义。

版本 1.0 中新增。

另请参阅

OPTICS

在多个 eps 值下进行类似的聚类。我们的实现针对内存使用进行了优化。

注释

有关示例,请参见 DBSCAN 聚类算法演示

此实现批量计算所有邻域查询,这将内存复杂度提高到 O(n.d),其中 d 是平均邻居数,而原始 DBSCAN 的内存复杂度为 O(n)。根据 algorithm,查询这些最近邻域时,它可能会产生更高的内存复杂度。

避免查询复杂度的一种方法是使用 NearestNeighbors.radius_neighbors_graphmode='distance' 分块预计算稀疏邻域,然后在此处使用 metric='precomputed'

另一种减少内存和计算时间的方法是删除(近)重复点并使用 sample_weight

OPTICS 提供了内存使用率较低的类似聚类。

参考文献

Ester, M., H. P. Kriegel, J. Sander, and X. Xu, “一种基于密度的算法,用于发现大型空间数据库中带有噪声的集群”。在:第二届知识发现和数据挖掘国际会议论文集,俄勒冈州波特兰市,AAAI 出版社,第 226-231 页。1996 年

Schubert, E., Sander, J., Ester, M., Kriegel, H. P., & Xu, X. (2017)。“DBSCAN 再探:为什么以及如何(仍然)使用 DBSCAN。” ACM 数据库系统事务 (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)[source]#

根据特征或距离矩阵执行 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)[source]#

根据数据或距离矩阵计算聚类并预测标签。

参数:
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()[source]#

获取此对象的元数据路由。

请查看 用户指南,了解路由机制的工作原理。

返回:
routingMetadataRequest

一个 MetadataRequest 封装了路由信息。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deep布尔值,默认为 True

如果为 True,将返回此估计器以及作为估计器的包含子对象的参数。

返回:
params字典

参数名称与其值的映射。

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') DBSCAN[source]#

请求传递到 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对象

更新后的对象。

set_params(**params)[source]#

设置此估计器的参数。

此方法适用于简单的估计器以及嵌套对象(例如 Pipeline)。后者具有 <component>__<parameter> 形式的参数,因此可以更新嵌套对象的每个组件。

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。