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)#

执行K-means聚类算法。

更多信息请参阅 用户指南

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

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

n_clustersint

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

sample_weightarray-like,形状为 (n_samples,),默认=None

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

init{‘k-means++’, ‘random’},可调用对象或形状为 (n_clusters, n_features) 的array-like,默认=’k-means++’

初始化方法:

  • 'k-means++' : 以一种智能的方式选择初始聚类中心,以加速收敛。详见k_init中的注释部分。

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

  • 如果传递了一个数组,则其形状应为 (n_clusters, n_features) 并给出初始中心。

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

n_init‘auto’ 或 int,默认=”auto”

k-means算法将以不同的质心种子运行多次。最终结果将是n_init次连续运行中惯性最好的输出。

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

Added in version 1.2: 添加了 n_init 的’auto’选项。

Changed in version 1.4: n_init 的默认值更改为 'auto'

max_iterint,默认=300

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

verbosebool,默认=False

详细模式。

tolfloat,默认=1e-4

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

random_stateint, RandomState实例或None,默认=None

用于质心初始化的随机数生成。使用一个整数使随机性确定。 详见 术语表

copy_xbool,默认=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) 的数组,它更占用内存。

Changed in version 0.18: 添加了Elkan算法

Changed in version 1.1: 将”full”重命名为”lloyd”,并弃用了”auto”和”full”。 将”auto”改为使用”lloyd”而不是”elkan”。

return_n_iterbool,默认=False

是否返回迭代次数。

Returns:
centroid形状为 (n_clusters, n_features) 的ndarray

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

label形状为 (n_samples,) 的ndarray

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

inertiafloat

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

best_n_iterint

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

Examples

>>> 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