k_means#

sklearn.cluster.k_means(X, n_clusters, *, sample_weight=None, init='k-means++', n_init='auto', max_iter=300, verbose=False, tol=0.0001, random_state=None, copy_x=True, algorithm='lloyd', return_n_iter=False)[source]#

执行 K-means 聚类算法。

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

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

要聚类的观测值。需要注意的是,数据将被转换为 C 顺序,如果给定数据不是 C 连续的,这将导致内存复制。

n_clusters整型

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

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

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

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

初始化方法

  • 'k-means++':以智能方式选择 k-means 聚类的初始簇中心,以加速收敛。有关更多详细信息,请参阅 k_init 中的注意事项。

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

  • 如果传入一个数组,其形状应为 (n_clusters, n_features),并提供初始中心。

  • 如果传入一个可调用对象,它应接受参数 Xn_clusters 和一个随机状态,并返回一个初始化。

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

k-means 算法将使用不同的质心种子运行的次数。最终结果将是 n_init 次连续运行中惯性方面的最佳输出。

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

在 1.2 版中新增:n_init 添加了 ‘auto’ 选项。

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

max_iter整型,默认值为 300

k-means 算法的最大运行迭代次数。

verbose布尔型,默认值为 False

详细模式。

tol浮点型,默认值为 1e-4

关于两次连续迭代中簇中心差异的 Frobenius 范数的相对容差,用于声明收敛。

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

确定质心初始化的随机数生成。使用整型使随机性确定。请参阅术语表

copy_x布尔型,默认值为 True

在预计算距离时,首先对数据进行中心化会更数值精确。如果 copy_x 为 True(默认值),则不修改原始数据。如果为 False,则原始数据会被修改,并在函数返回前恢复,但通过减去再添加数据均值可能会引入微小的数值差异。请注意,如果原始数据不是 C 连续的,即使 copy_x 为 False 也会创建副本。如果原始数据是稀疏的但不是 CSR 格式的,即使 copy_x 为 False 也会创建副本。

algorithm{“lloyd”, “elkan”},默认值为 “lloyd”

要使用的 K-means 算法。经典的 EM 风格算法是 "lloyd"。“elkan” 变体在某些具有明确定义簇的数据集上可能更有效,因为它使用了三角不等式。然而,由于需要分配一个额外形状为 (n_samples, n_clusters) 的数组,它会消耗更多内存。

在 0.18 版中更改:添加了 Elkan 算法

在 1.1 版中更改:将“full”重命名为“lloyd”,并弃用了“auto”和“full”。将“auto”更改为使用“lloyd”而非“elkan”。

return_n_iter布尔型,默认值为 False

是否返回迭代次数。

返回:
centroidndarray,形状为 (n_clusters, n_features)

在 k-means 最后一次迭代中找到的质心。

labelndarray,形状为 (n_samples,)

label[i] 是第 i 个观测值最接近的质心的代码或索引。

inertia浮点型

惯性准则的最终值(训练集中所有观测值到最近质心的平方距离之和)。

best_n_iter整型

对应于最佳结果的迭代次数。仅当 return_n_iter 设置为 True 时返回。

示例

>>> import numpy as np
>>> from sklearn.cluster import k_means
>>> X = np.array([[1, 2], [1, 4], [1, 0],
...               [10, 2], [10, 4], [10, 0]])
>>> centroid, label, inertia = k_means(
...     X, n_clusters=2, n_init="auto", random_state=0
... )
>>> centroid
array([[10.,  2.],
       [ 1.,  2.]])
>>> label
array([1, 1, 1, 0, 0, 0], dtype=int32)
>>> inertia
16.0