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)
,并提供初始中心。如果传入一个可调用对象,它应接受参数
X
、n_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