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集群算法。

阅读更多的 User Guide .

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

要聚集的观察。必须注意的是,数据将被转换为C排序,如果给定数据不是C连续的,这将导致内存复制。

n_clustersint

要形成的集群数量以及要生成的重心数量。

sample_weight形状类似数组(n_samples,),默认=无

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

init' k-means ++',可调用或类似数组的形状 (n_clusters,n_features),默认=' k-means ++'

初始化方法:

  • 'k-means++' :以智能的方式选择初始集群中心进行k均值集群,以加速收敛。有关更多详细信息,请参阅k_init中的注释部分。

  • 'random' :选择 n_clusters 根据初始重心的数据随机观察(行)。

  • 如果传递数组,它应该是形状的 (n_clusters, n_features) 并给出初始中心。

  • 如果传递了可调用内容,则应该接受参数 X , n_clusters 和随机状态并返回初始化。

n_init“Auto”或int,默认=“Auto”

k-means算法将在不同的重心种子下运行的次数。就惯性而言,最终结果将是n_initit连续运行的最佳输出。

n_init='auto' ,运行次数取决于初始值:如果使用,则为10 init='random'init 是可调用的; 1如果使用 init='k-means++'init 是一个类似阵列的。

Added in version 1.2: 添加了“自动”选项 n_init .

在 1.4 版本发生变更: 默认值 n_init 改为 'auto' .

max_iterint,默认=300

k均值算法运行的最大迭代次数。

verbose布尔,默认=假

冗长模式。

tolfloat,默认= 1 e-4

相对容差关于Frobenius范数的差异在两个连续迭代的聚类中心,以宣布收敛。

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

确定重心初始化的随机数生成。使用int使随机性具有确定性。看到 Glossary .

copy_x布尔,默认=True

预计算距离时,首先将数据集中在数字上更准确。如果 copy_x 为True(默认),则不会修改原始数据。如果为False,则修改原始数据,并在函数返回之前放回,但通过减法然后相加数据平均值可能会引入小的数字差异。请注意,如果原始数据不是C连续的,即使 copy_x 是假的。如果原始数据很稀疏,但不是CSR格式,则即使 copy_x 是假的。

algorithm{“lloyd”,“elkan”},默认=“lloyd”

要使用的K-means算法。经典的EM风格算法是 "lloyd" .的 "elkan" 通过使用三角不等式,对于某些具有明确集群的数据集,变异可以更有效。然而,由于分配了额外的形状数组,它的内存更加密集 (n_samples, n_clusters) .

在 0.18 版本发生变更: 添加了Elkan算法

在 1.1 版本发生变更: 将“full”重命名为“lloyd”,并弃用“auto”和“full”。更改“汽车”使用“劳埃德”而不是“埃尔坎”。

return_n_iter布尔,默认=假

是否返回迭代次数。

返回:
centroid形状的nd数组(n_classes,n_features)

在k均值的最后一次迭代中发现的重心。

label形状的nd数组(n_samples,)

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

inertia浮子

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

best_n_iterint

对应于最佳结果的迭代次数。只有在以下情况下才返回 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