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 之间), default=5
一个点在邻域中被视为核心点所需的样本数。此外,向上和向下陡峭的区域不能有超过
min_samples
个连续的非陡峭点。表示为绝对数或样本数的一个分数(四舍五入后至少为 2)。- max_epsfloat, default=np.inf
两个样本之间被视为彼此邻域内的最大距离。默认值
np.inf
将识别所有尺度的聚类;减小max_eps
将缩短运行时间。- metricstr 或 callable, default=’minkowski’
用于距离计算的度量。可以使用 scikit-learn 或
scipy.spatial.distance
中的任何度量。如果
metric
是一个可调用函数,则它将对每对实例(行)调用,并记录结果值。该可调用函数应接受两个数组作为输入,并返回一个值表示它们之间的距离。这适用于 SciPy 的度量,但效率不如将度量名称作为字符串传递。如果度量是“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’}, default=’xi’
使用计算出的可达性和排序来提取聚类的方法。
- epsfloat, default=None
两个样本之间被视为彼此邻域内的最大距离。默认情况下,它假定与
max_eps
相同的值。仅当cluster_method='dbscan'
时使用。- xifloat (0 到 1 之间), default=0.05
确定可达性图中构成聚类边界的最小陡度。例如,可达性图中向上点的定义是,从一个点到其后继点的比率至多为 1-xi。仅当
cluster_method='xi'
时使用。- predecessor_correctionbool, default=True
根据 OPTICS 计算出的前驱修正聚类 [2]。此参数对大多数数据集的影响很小。仅当
cluster_method='xi'
时使用。- min_cluster_sizeint > 1 或 float (0 到 1 之间), default=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
传递给
BallTree
或KDTree
的叶大小。这会影响构造和查询的速度,以及存储树所需的内存。最佳值取决于问题的性质。- memorystr 或具有 joblib.Memory 接口的对象, default=None
用于缓存树计算的输出。默认情况下,不进行缓存。如果给定字符串,则它是缓存目录的路径。
- n_jobsint, default=None
用于邻居搜索的并行作业数。
None
表示 1,除非在joblib.parallel_backend
上下文中。-1
表示使用所有处理器。有关详细信息,请参阅词汇表。
- 属性:
- labels_形状为 (n_samples,) 的 ndarray
赋予 fit() 的数据集中每个点的聚类标签。噪声样本和不包含在
cluster_hierarchy_
叶聚类中的点被标记为 -1。- reachability_形状为 (n_samples,) 的 ndarray
每个样本的可达距离,按对象顺序索引。使用
clust.reachability_[clust.ordering_]
以聚类顺序访问。- ordering_形状为 (n_samples,) 的 ndarray
样本索引的聚类有序列表。
- core_distances_形状为 (n_samples,) 的 ndarray
每个样本成为核心点的距离,按对象顺序索引。永远不会成为核心的点距离为 inf。使用
clust.core_distances_[clust.ordering_]
以聚类顺序访问。- predecessor_形状为 (n_samples,) 的 ndarray
样本被从其到达的点,按对象顺序索引。种子点的前驱为 -1。
- cluster_hierarchy_形状为 (n_clusters, 2) 的 ndarray
聚类列表,每行形式为
[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_形状为 (
n_features_in_
,) 的 ndarray 在 拟合 过程中看到的特征名称。仅当
X
的所有特征名称均为字符串时才定义。1.0 版本新增。
另请参阅
DBSCAN
指定邻域半径(eps)的类似聚类。我们的实现针对运行时进行了优化。
参考文献
[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, 稀疏矩阵} 形状为 (n_samples, n_features),如果 metric=’precomputed’ 则形状为 (n_samples, n_samples)
特征数组,如果 metric='precomputed' 则是样本之间的距离数组。如果提供稀疏矩阵,它将被转换为 CSR 格式。
- y忽略
未使用,按约定为 API 一致性而存在。
- 返回:
- self对象
返回 self 的拟合实例。
- fit_predict(X, y=None, **kwargs)[source]#
对
X
执行聚类并返回聚类标签。- 参数:
- Xarray-like,形状为 (n_samples, n_features)
输入数据。
- y忽略
未使用,按约定为 API 一致性而存在。
- **kwargsdict
将传递给
fit
的参数。1.4 版本新增。
- 返回:
- labels形状为 (n_samples,) 的 ndarray, dtype=np.int64
聚类标签。
- get_metadata_routing()[source]#
获取此对象的元数据路由。
请查阅用户指南,了解路由机制的工作原理。
- 返回:
- routingMetadataRequest
封装路由信息的
MetadataRequest
。