MiniBatchKMeans#

class sklearn.cluster.MiniBatchKMeans(n_clusters=8, *, init='k-means++', max_iter=100, batch_size=1024, verbose=0, compute_labels=True, random_state=None, tol=0.0, max_no_improvement=10, init_size=None, n_init='auto', reassignment_ratio=0.01)[source]#

Mini-Batch K-Means 聚类。

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

参数:
n_clusters整型,默认值=8

要形成的簇的数量以及要生成的质心的数量。

init{‘k-means++’, ‘random’},可调用或形状为 (n_clusters, n_features) 的类数组,默认值=’k-means++’

初始化方法

‘k-means++’:使用基于点对总惯量贡献的经验概率分布进行采样来选择初始簇质心。这种技术加速了收敛。所实现的算法是“贪婪 k-means++”。它与普通的 k-means++ 的不同之处在于,它在每个采样步骤进行多次尝试,并从中选择最佳质心。

‘random’:从数据中随机选择 n_clusters 个观测值(行)作为初始质心。

如果传入一个数组,它的形状应为 (n_clusters, n_features),并给出初始中心。

如果传入一个可调用对象,它应接受 X、n_clusters 和一个随机状态作为参数,并返回一个初始化结果。

有关初始化影响的评估,请参阅示例k-means 初始化影响的经验评估

max_iter整型,默认值=100

在独立于任何早期停止准则启发式方法的情况下,对完整数据集进行的最大迭代次数。

batch_size整型,默认值=1024

迷你批次的大小。为了加快计算速度,可以将 batch_size 设置为大于 256 * 核心数,以启用所有核心的并行计算。

1.0 版本中更改: batch_size 的默认值从 100 更改为 1024。

verbose整型,默认值=0

详细模式。

compute_labels布尔型,默认值=True

一旦迷你批次优化在 `fit` 中收敛,就计算完整数据集的标签分配和惯量。

random_state整型,RandomState 实例或 None,默认值=None

确定质心初始化和随机重新分配的随机数生成。使用整型使随机性确定。参见词汇表

tol浮点型,默认值=0.0

根据平滑的、方差归一化的平均中心平方位置变化量来控制早期停止。这种早期停止启发式方法更接近于算法的批处理版本中使用的启发式方法,但与惯量启发式方法相比,会带来轻微的计算和内存开销。

要禁用基于归一化中心变化的收敛检测,请将 tol 设置为 0.0(默认值)。

max_no_improvement整型,默认值=10

根据连续没有改善平滑惯量的迷你批次数量来控制早期停止。

要禁用基于惯量的收敛检测,请将 max_no_improvement 设置为 None。

init_size整型,默认值=None

用于加速初始化(有时以牺牲准确性为代价)的随机采样样本数量:唯一的算法通过在数据随机子集上运行批量 KMeans 来初始化。这需要大于 n_clusters。

如果为 None,则启发式为:如果 3 * batch_size < n_clusters,则 init_size = 3 * batch_size,否则 init_size = 3 * n_clusters

n_init‘auto’ 或 整型,默认值=”auto”

尝试的随机初始化次数。与 KMeans 不同,该算法仅运行一次,使用 n_init 次初始化中以惯量衡量的最佳结果。对于稀疏高维问题,建议进行多次运行(参见使用 k-means 对稀疏数据进行聚类)。

n_init='auto' 时,运行次数取决于 init 的值:如果使用 init='random'init 是可调用对象,则为 3;如果使用 init='k-means++'init 是类数组,则为 1。

1.2 版本新增: n_init 添加了 'auto' 选项。

1.4 版本中更改: n_init 的默认值更改为 'auto'

reassignment_ratio浮点型,默认值=0.01

控制中心重新分配的最大计数的分数。值越高意味着低计数中心更容易被重新分配,这意味着模型收敛时间会更长,但应该会得到更好的聚类结果。然而,过高的值可能会导致收敛问题,尤其是在批次大小较小的情况下。

属性:
cluster_centers_形状为 (n_clusters, n_features) 的 ndarray

簇中心的坐标。

labels_形状为 (n_samples,) 的 ndarray

每个点的标签(如果 compute_labels 设置为 True)。

inertia_浮点型

如果 compute_labels 设置为 True,则与所选分区相关的惯量准则值。如果 compute_labels 设置为 False,则它是基于批次惯量指数加权平均值的惯量近似值。惯量定义为样本到其簇中心的平方距离之和,如果提供了样本权重,则按样本权重加权。

n_iter_整型

对完整数据集的迭代次数。

n_steps_整型

已处理的迷你批次数量。

1.0 版本新增。

n_features_in_整型

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

0.24 版本新增。

feature_names_in_形状为 (n_features_in_,) 的 ndarray

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

1.0 版本新增。

另请参见

KMeans

基于 Lloyd 算法的聚类方法的经典实现。它在每次迭代中消耗整个输入数据。

备注

参见 https://www.eecs.tufts.edu/~dsculley/papers/fastkmeans.pdf

当数据集中的点太少时,某些中心可能会重复,这意味着请求的簇数量和返回的簇数量在聚类方面不会总是匹配。一种解决方案是将 reassignment_ratio=0,这可以防止重新分配过小的簇。

有关 Mini-Batch K-Means 聚类与 BIRCH 的比较,请参阅比较 BIRCH 和 MiniBatchKMeans

示例

>>> from sklearn.cluster import MiniBatchKMeans
>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0],
...               [4, 2], [4, 0], [4, 4],
...               [4, 5], [0, 1], [2, 2],
...               [3, 2], [5, 5], [1, -1]])
>>> # manually fit on batches
>>> kmeans = MiniBatchKMeans(n_clusters=2,
...                          random_state=0,
...                          batch_size=6,
...                          n_init="auto")
>>> kmeans = kmeans.partial_fit(X[0:6,:])
>>> kmeans = kmeans.partial_fit(X[6:12,:])
>>> kmeans.cluster_centers_
array([[3.375, 3.  ],
       [0.75 , 0.5 ]])
>>> kmeans.predict([[0, 0], [4, 4]])
array([1, 0], dtype=int32)
>>> # fit on the whole data
>>> kmeans = MiniBatchKMeans(n_clusters=2,
...                          random_state=0,
...                          batch_size=6,
...                          max_iter=10,
...                          n_init="auto").fit(X)
>>> kmeans.cluster_centers_
array([[3.55102041, 2.48979592],
       [1.06896552, 1.        ]])
>>> kmeans.predict([[0, 0], [4, 4]])
array([1, 0], dtype=int32)

有关 Mini-Batch K-Means 聚类与其他聚类算法的比较,请参阅在玩具数据集上比较不同的聚类算法

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

通过将 X 分块为迷你批次来计算 X 上的质心。

参数:
X形状为 (n_samples, n_features) 的 {类数组, 稀疏矩阵}

要聚类的训练实例。需要注意的是,数据将被转换为 C 顺序,如果给定数据不是 C 连续的,这将导致内存复制。如果传入稀疏矩阵,如果它不是 CSR 格式,则会进行复制。

y已忽略

未被使用,此处根据 API 约定保留。

sample_weight形状为 (n_samples,) 的类数组,默认值=None

X 中每个观测值的权重。如果为 None,则所有观测值都被赋予相同的权重。如果 init 是一个可调用对象或用户提供的数组,则在初始化期间不使用 sample_weight

0.20 版本新增。

返回:
self对象

已拟合的估计器。

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

计算簇中心并预测每个样本的簇索引。

便捷方法;等同于调用 fit(X) 后再调用 predict(X)。

参数:
X形状为 (n_samples, n_features) 的 {类数组, 稀疏矩阵}

待转换的新数据。

y已忽略

未被使用,此处根据 API 约定保留。

sample_weight形状为 (n_samples,) 的类数组,默认值=None

X 中每个观测值的权重。如果为 None,则所有观测值都被赋予相同的权重。

返回:
labels形状为 (n_samples,) 的 ndarray

每个样本所属簇的索引。

fit_transform(X, y=None, sample_weight=None)[source]#

计算聚类并将 X 转换为簇距离空间。

等同于 fit(X).transform(X),但实现更高效。

参数:
X形状为 (n_samples, n_features) 的 {类数组, 稀疏矩阵}

待转换的新数据。

y已忽略

未被使用,此处根据 API 约定保留。

sample_weight形状为 (n_samples,) 的类数组,默认值=None

X 中每个观测值的权重。如果为 None,则所有观测值都被赋予相同的权重。

返回:
X_new形状为 (n_samples, n_clusters) 的 ndarray

转换到新空间中的 X。

get_feature_names_out(input_features=None)[source]#

获取转换的输出特征名称。

输出特征名称将以小写类名作为前缀。例如,如果转换器输出 3 个特征,则输出特征名称为:["class_name0", "class_name1", "class_name2"]

参数:
input_features类字符串数组或 None,默认值=None

仅用于根据 fit 中看到的名称验证特征名称。

返回:
feature_names_out字符串对象的 ndarray

转换后的特征名称。

get_metadata_routing()[source]#

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

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

返回:
routingMetadataRequest

一个封装路由信息的 MetadataRequest 对象。

get_params(deep=True)[source]#

获取此估计器的参数。

参数:
deep布尔型,默认值=True

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

返回:
params字典

参数名称映射到其值。

partial_fit(X, y=None, sample_weight=None)[source]#

在单个迷你批次 X 上更新 k-means 估计。

参数:
X形状为 (n_samples, n_features) 的 {类数组, 稀疏矩阵}

要聚类的训练实例。需要注意的是,数据将被转换为 C 顺序,如果给定数据不是 C 连续的,这将导致内存复制。如果传入稀疏矩阵,如果它不是 CSR 格式,则会进行复制。

y已忽略

未被使用,此处根据 API 约定保留。

sample_weight形状为 (n_samples,) 的类数组,默认值=None

X 中每个观测值的权重。如果为 None,则所有观测值都被赋予相同的权重。如果 init 是一个可调用对象或用户提供的数组,则在初始化期间不使用 sample_weight

返回:
self对象

返回更新后的估计器。

predict(X)[source]#

预测 X 中每个样本所属的最接近的簇。

在向量量化文献中,cluster_centers_ 被称为码本,predict 返回的每个值都是码本中最接近码的索引。

参数:
X形状为 (n_samples, n_features) 的 {类数组, 稀疏矩阵}

待预测的新数据。

返回:
labels形状为 (n_samples,) 的 ndarray

每个样本所属簇的索引。

score(X, y=None, sample_weight=None)[source]#

X 在 K-means 目标上的值的反向。

参数:
X形状为 (n_samples, n_features) 的 {类数组, 稀疏矩阵}

新数据。

y已忽略

未被使用,此处根据 API 约定保留。

sample_weight形状为 (n_samples,) 的类数组,默认值=None

X 中每个观测值的权重。如果为 None,则所有观测值都被赋予相同的权重。

返回:
score浮点型

X 在 K-means 目标上的值的反向。

set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') MiniBatchKMeans[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_output(*, transform=None)[source]#

设置输出容器。

有关如何使用 API 的示例,请参阅Introducing the set_output API

参数:
transform{“default”, “pandas”, “polars”},默认值=None

配置 transformfit_transform 的输出。

  • "default":转换器的默认输出格式

  • "pandas":DataFrame 输出

  • "polars":Polars 输出

  • None:转换配置不变

1.4 版本新增: 添加了 "polars" 选项。

返回:
self估计器实例

估计器实例。

set_params(**params)[source]#

设置此估计器的参数。

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

参数:
**params字典

估计器参数。

返回:
self估计器实例

估计器实例。

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

请求传递给 partial_fit 方法的元数据。

请注意,此方法仅在 enable_metadata_routing=True 时才相关(参见 sklearn.set_config)。请参见用户指南了解路由机制的工作原理。

每个参数的选项是

  • True:请求元数据,如果提供则传递给 partial_fit。如果未提供元数据,则请求被忽略。

  • False:不请求元数据,元估计器不会将其传递给 partial_fit

  • None:不请求元数据,如果用户提供,元估计器将引发错误。

  • str:元数据应以给定的别名而不是原始名称传递给元估计器。

默认值 (sklearn.utils.metadata_routing.UNCHANGED) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。

1.3 版本新增。

注意

此方法仅当此估计器作为元估计器(例如,在 Pipeline 内部使用)的子估计器时才相关。否则,它没有效果。

参数:
sample_weightstr、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

partial_fit 方法中 sample_weight 参数的元数据路由。

返回:
self对象

更新后的对象。

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

请求传递给 score 方法的元数据。

请注意,此方法仅在 enable_metadata_routing=True 时才相关(参见 sklearn.set_config)。请参见用户指南了解路由机制的工作原理。

每个参数的选项是

  • True:请求元数据,如果提供则传递给 score。如果未提供元数据,则请求被忽略。

  • False:不请求元数据,元估计器不会将其传递给 score

  • None:不请求元数据,如果用户提供,元估计器将引发错误。

  • str:元数据应以给定的别名而不是原始名称传递给元估计器。

默认值 (sklearn.utils.metadata_routing.UNCHANGED) 保留现有请求。这允许您更改某些参数的请求而不更改其他参数。

1.3 版本新增。

注意

此方法仅当此估计器作为元估计器(例如,在 Pipeline 内部使用)的子估计器时才相关。否则,它没有效果。

参数:
sample_weightstr、True、False 或 None,默认值=sklearn.utils.metadata_routing.UNCHANGED

score 方法中 sample_weight 参数的元数据路由。

返回:
self对象

更新后的对象。

transform(X)[source]#

将 X 转换为簇距离空间。

在新空间中,每个维度都是到簇中心的距离。请注意,即使 X 是稀疏的,transform 返回的数组通常也是稠密的。

参数:
X形状为 (n_samples, n_features) 的 {类数组, 稀疏矩阵}

待转换的新数据。

返回:
X_new形状为 (n_samples, n_clusters) 的 ndarray

转换到新空间中的 X。