OPTICS#

class sklearn.cluster.OPTICS(*, min_samples=5, max_eps=inf, metric='minkowski', p=2, metric_params=None, cluster_method='xi', eps=None, xi=0.05, predecessor_correction=True, min_cluster_size=None, algorithm='auto', leaf_size=30, memory=None, n_jobs=None)[source]#

从向量数组估计聚类结构。

OPTICS (Ordering Points To Identify the Clustering Structure) 与 DBSCAN 密切相关,用于寻找高密度的核心样本并从这些样本扩展集群 [1]。与 DBSCAN 不同,它会为可变邻域半径保留集群层次结构。比当前 scikit-learn 中 DBSCAN 的实现更适合用于大型数据集。

然后使用类似于 DBSCAN 的方法 (cluster_method = 'dbscan') 或 [1] 中提出的自动技术 (cluster_method = 'xi') 从集群顺序中提取集群。

此实现与原始 OPTICS 不同之处在于,它首先对所有点执行 k-最近邻搜索以识别所有点的核心大小(而不是在循环遍历点时计算邻居)。然后计算到未处理点的可达性距离,以构建集群顺序,类似于原始 OPTICS。请注意,我们没有使用堆来管理扩展候选者,因此时间复杂度为 O(n^2)。

用户指南 中阅读更多内容。

参数:
min_samplesint > 1 或 float (0 到 1 之间),默认值=5

邻域中使一个点被认为是核心点的样本数。此外,向上和向下陡峭区域不能有超过 min_samples 个连续的非陡峭点。表示为绝对数字或样本数的分数(四舍五入到至少为 2)。

max_epsfloat,默认值=np.inf

两个样本之间的最大距离,使其中一个被认为是另一个的邻域。默认值 np.inf 将识别所有尺度的集群;减小 max_eps 将导致更短的运行时间。

metricstr or callable, default=’minkowski’

用于距离计算的度量。可以使用 scikit-learn 或 scipy.spatial.distance 中的任何度量。

如果 metric 是一个可调用函数,它将作用于每对实例(行)并记录结果值。可调用函数应接受两个数组作为输入,并返回一个表示它们之间距离的值。这适用于 Scipy 的度量,但效率低于将度量名称作为字符串传递。如果 metric 为 "precomputed",则假定 X 是一个距离矩阵且必须是方阵。

度量的有效值包括:

  • 来自 scikit-learn:['cityblock', 'cosine', 'euclidean', 'l1', 'l2', 'manhattan']

  • 来自 scipy.spatial.distance:['braycurtis', 'canberra', 'chebyshev', 'correlation', 'dice', 'hamming', 'jaccard', 'kulsinski', 'mahalanobis', 'minkowski', 'rogerstanimoto', 'russellrao', 'seuclidean', 'sokalmichener', 'sokalsneath', 'sqeuclidean', 'yule']

稀疏矩阵仅受 scikit-learn 度量支持。有关这些度量的详细信息,请参阅 scipy.spatial.distance

注意

'kulsinski' 在 SciPy 1.9 中已弃用,并将在 SciPy 1.11 中移除。

pfloat, default=2

来自 pairwise_distances 的 Minkowski 度量的参数。当 p = 1 时,这相当于使用 manhattan_distance (l1),p = 2 时相当于使用 euclidean_distance (l2)。对于任意 p,使用 minkowski_distance (l_p)。

metric_paramsdict, default=None

度量函数的附加关键字参数。

cluster_method{'xi', 'dbscan'},默认值='xi'

用于使用计算出的可达性和排序提取集群的提取方法。

epsfloat,默认值=None

两个样本之间的最大距离,使其中一个被认为是另一个的邻域。默认情况下,它采用与 max_eps 相同的值。仅当 cluster_method='dbscan' 时使用。

xifloat (0 到 1 之间),默认值=0.05

确定构成集群边界的可达性图上的最小陡峭程度。例如,可达性图中的一个向上点定义为一点与其后继点的比率至多为 1-xi。仅当 cluster_method='xi' 时使用。

predecessor_correctionbool,默认值=True

根据 OPTICS [2] 计算的前驱校正集群。此参数对大多数数据集的影响很小。仅当 cluster_method='xi' 时使用。

min_cluster_sizeint > 1 或 float (0 到 1 之间),默认值=None

OPTICS 集群中的最小样本数,表示为绝对数字或样本数的分数(四舍五入到至少为 2)。如果为 None,则使用 min_samples 的值。仅当 cluster_method='xi' 时使用。

algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=’auto’

用于计算最近邻居的算法

  • 'ball_tree' 将使用 BallTree

  • 'kd_tree' 将使用 KDTree

  • 'brute' 将使用暴力搜索。

  • 'auto'(默认)将尝试根据传递给 fit 方法的值来决定最合适的算法。

注意:对稀疏输入进行拟合将覆盖此参数的设置,使用暴力方法。

leaf_sizeint, default=30

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

memorystr 或具有 joblib.Memory 接口的对象, 默认为 None

用于缓存树计算的输出。默认情况下,不进行缓存。如果给定字符串,则为缓存目录的路径。

n_jobsint, default=None

用于邻居搜索的并行作业数。None 表示 1,除非在 joblib.parallel_backend 上下文中。-1 表示使用所有处理器。有关详细信息,请参阅 词汇表

属性:
labels_ndarray of shape (n_samples,)

给定 fit() 的数据集中每个点的集群标签。噪声样本和不包含在 cluster_hierarchy_ 叶集群中的点被标记为 -1。

reachability_ndarray of shape (n_samples,)

按对象顺序索引的每个样本的可达性距离。使用 clust.reachability_[clust.ordering_] 以集群顺序访问。

ordering_ndarray of shape (n_samples,)

按集群顺序排列的样本索引列表。

core_distances_ndarray of shape (n_samples,)

按对象顺序索引的每个样本成为核心点的距离。永远不会成为核心点的点距离为 inf。使用 clust.core_distances_[clust.ordering_] 以集群顺序访问。

predecessor_ndarray of shape (n_samples,)

按对象顺序索引的样本被到达的前驱点。种子点的前驱点为 -1。

cluster_hierarchy_ndarray of shape (n_clusters, 2)

集群列表,每行形式为 [start, end],所有索引均包含在内。集群按照 (end, -start)(升序)排序,以便包含较小集群的较大集群排在较小集群之后。由于 labels_ 不反映层次结构,通常 len(cluster_hierarchy_) > np.unique(optics.labels_)。另请注意,这些索引是 ordering_ 的索引,即 X[ordering_][start:end + 1] 构成一个集群。仅当 cluster_method='xi' 时可用。

n_features_in_int

拟合 期间看到的特征数。

0.24 版本新增。

feature_names_in_shape 为 (n_features_in_,) 的 ndarray

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

1.0 版本新增。

另请参阅

DBSCAN

针对指定邻域半径 (eps) 的类似聚类。我们的实现针对运行时进行了优化。

References

[1] (1,2)

Ankerst, Mihael, Markus M. Breunig, Hans-Peter Kriegel, and Jörg Sander. “OPTICS: ordering points to identify the clustering structure.” ACM SIGMOD Record 28, no. 2 (1999): 49-60.

[2]

Schubert, Erich, Michael Gertz. “Improving the Cluster Structure Extracted from OPTICS Plots.” Proc. of the Conference “Lernen, Wissen, Daten, Analysen” (LWDA) (2018): 318-329.

示例

>>> from sklearn.cluster import OPTICS
>>> import numpy as np
>>> X = np.array([[1, 2], [2, 5], [3, 6],
...               [8, 7], [8, 8], [7, 3]])
>>> clustering = OPTICS(min_samples=2).fit(X)
>>> clustering.labels_
array([0, 0, 0, 1, 1, 1])

有关更详细的示例,请参阅 OPTICS 聚类算法演示

有关 OPTICS 与其他聚类算法的比较,请参阅 比较玩具数据集上的不同聚类算法

fit(X, y=None)[source]#

执行 OPTICS 聚类。

提取有序的点列表和可达性距离,并使用在 OPTICS 对象实例化时指定的 max_eps 距离执行初始聚类。

参数:
X{ndarray, sparse matrix} of shape (n_samples, n_features), or (n_samples, n_samples) if metric=’precomputed’

特征数组,如果 metric='precomputed',则为样本之间的距离数组。如果提供稀疏矩阵,它将转换为 CSR 格式。

y被忽略

未使用,按照惯例为保持 API 一致性而存在。

返回:
selfobject

Returns a fitted instance of self.

fit_predict(X, y=None, **kwargs)[source]#

X 执行聚类并返回聚类标签。

参数:
Xshape 为 (n_samples, n_features) 的 array-like

Input data.

y被忽略

未使用,按照惯例为保持 API 一致性而存在。

**kwargsdict

要传递给 fit 的参数。

1.4 版本新增。

返回:
labels形状为 (n_samples,) 的 ndarray,dtype=np.int64

聚类标签。

get_metadata_routing()[source]#

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

请查阅 用户指南,了解路由机制如何工作。

返回:
routingMetadataRequest

封装路由信息的 MetadataRequest

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deepbool, default=True

如果为 True,将返回此估计器以及包含的子对象(如果它们是估计器)的参数。

返回:
paramsdict

参数名称映射到其值。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回:
selfestimator instance

估计器实例。