MeanShift#

class sklearn.cluster.MeanShift(*, bandwidth=None, seeds=None, bin_seeding=False, min_bin_freq=1, cluster_all=True, n_jobs=None, max_iter=300)[source]#

使用平坦核的 Mean Shift 聚类。

均值漂移(Mean Shift)聚类旨在发现平滑样本密度中的“团块”。它是一种基于质心的算法,通过更新候选质心使其成为给定区域内点的均值来工作。然后,这些候选质心在后处理阶段进行过滤,以消除近似重复项,形成最终的质心集合。

为了提高可扩展性,使用分箱技术进行种子点选择。

有关如何使用 MeanShift 聚类的示例,请参阅:均值漂移聚类算法演示

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

参数:
bandwidthfloat, default=None

平坦核中使用的带宽。

如果未给出,则使用 sklearn.cluster.estimate_bandwidth 估算带宽;有关可扩展性的提示,请参阅该函数的文档(另请参阅下面的说明)。

seedsarray-like of shape (n_samples, n_features), default=None

用于初始化核的种子。如果未设置,则使用 clustering.get_bin_seeds 计算种子,其中带宽作为网格大小,其他参数为默认值。

bin_seedingbool, default=False

如果为 True,则初始核位置不是所有点的位置,而是点的离散化版本的位置,其中点被分箱到一个网格中,网格的粗糙度对应于带宽。将此选项设置为 True 将加快算法速度,因为初始化的种子会更少。默认值为 False。如果 seeds 参数不为 None,则忽略此参数。

min_bin_freqint, default=1

为了加快算法速度,只接受那些至少包含 min_bin_freq 个点的分箱作为种子。

cluster_allbool, default=True

如果为 True,则所有点都会被聚类,即使是那些不在任何核内的孤立点。孤立点被分配给最近的核。如果为 False,则孤立点被赋予聚类标签 -1。

n_jobsint, default=None

用于计算的作业数。以下任务受益于并行化:

  • 带宽估计和标签分配的最近邻搜索。详见 NearestNeighbors 类的文档字符串。

  • 所有种子的爬山优化。

有关更多详细信息,请参阅词汇表

None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。有关更多详细信息,请参阅词汇表

max_iterint, default=300

在聚类操作终止之前(对于该种子点),每个种子点的最大迭代次数,如果尚未收敛。

版本 0.22 新增。

属性:
cluster_centers_ndarray of shape (n_clusters, n_features)

Coordinates of cluster centers.

labels_ndarray of shape (n_samples,)

每个点的标签。

n_iter_int

对每个种子执行的最大迭代次数。

版本 0.22 新增。

n_features_in_int

拟合 期间看到的特征数。

0.24 版本新增。

feature_names_in_shape 为 (n_features_in_,) 的 ndarray

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

1.0 版本新增。

另请参阅

KMeans

K-Means 聚类。

注意事项

可扩展性

由于此实现使用平坦核和 Ball Tree 来查找每个核的成员,因此在较低维度中,复杂度将趋向于 O(T*n*log(n)),其中 n 是样本数,T 是点数。在较高维度中,复杂度将趋向于 O(T*n^2)。

通过使用更少的种子,例如在 get_bin_seeds 函数中使用更高的 min_bin_freq 值,可以提高可扩展性。

请注意,estimate_bandwidth 函数的可扩展性远低于均值漂移算法,如果使用它,它将成为瓶颈。

References

Dorin Comaniciu 和 Peter Meer,“Mean Shift: A robust approach toward feature space analysis”。IEEE Transactions on Pattern Analysis and Machine Intelligence。2002年。第 603-619 页。

示例

>>> from sklearn.cluster import MeanShift
>>> import numpy as np
>>> X = np.array([[1, 1], [2, 1], [1, 0],
...               [4, 7], [3, 5], [3, 6]])
>>> clustering = MeanShift(bandwidth=2).fit(X)
>>> clustering.labels_
array([1, 1, 1, 0, 0, 0])
>>> clustering.predict([[0, 0], [5, 5]])
array([1, 0])
>>> clustering
MeanShift(bandwidth=2)

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

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

执行聚类。

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

要聚类的样本。

y被忽略

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

返回:
selfobject

拟合的实例。

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

参数名称映射到其值。

predict(X)[source]#

Predict the closest cluster each sample in X belongs to.

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

New data to predict.

返回:
labelsndarray of shape (n_samples,)

Index of the cluster each sample belongs to.

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**paramsdict

估计器参数。

返回:
selfestimator instance

估计器实例。