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 聚类算法。
在用户指南中了解更多信息。
- 参数:
- Xshape 为 (n_samples, n_features) 的 {array-like, sparse matrix}
要聚类的观测数据。必须注意,数据将被转换为C序,如果给定数据不是C连续的,这将导致内存复制。
- n_clustersint
The number of clusters to form as well as the number of centroids to generate.
- sample_weightshape 为 (n_samples,) 的 array-like, default=None
对
X中每个观测数据的权重。如果为None,则所有观测数据被分配相同的权重。sample_weight在初始化期间不使用,如果init是可调用对象或用户提供的数组。- init{‘k-means++’, ‘random’}, callable or array-like of shape (n_clusters, n_features), default=’k-means++’
Method for initialization
'k-means++':以一种智能的方式选择k-means聚类的初始聚类中心,以加快收敛速度。有关更多详细信息,请参阅k_init中的“注释”部分。'random':从数据中随机选择n_clusters个观测数据(行)作为初始质心。如果传入一个数组,它的形状应为
(n_clusters, n_features),并提供初始中心。如果传入一个可调用对象,它应接受参数
X、n_clusters和一个随机状态,并返回一个初始化。
- n_init‘auto’ or int, default=”auto”
k-means算法将使用不同的质心种子运行的次数。最终结果将是n_init次连续运行中惯性方面的最佳输出。
当
n_init='auto'时,运行次数取决于init的值:如果使用init='random'或init是可调用对象,则为10;如果使用init='k-means++'或init是类似数组的对象,则为1。Added in version 1.2: Added ‘auto’ option for
n_init.版本1.4中的变化:
n_init的默认值更改为'auto'。- max_iterint, default=300
k-means算法运行的最大迭代次数。
- verbosebool, default=False
Verbosity mode.
- tolfloat, default=1e-4
关于两个连续迭代的聚类中心差异的Frobenius范数的相对容忍度,用于声明收敛。
- random_stateint, RandomState instance or None, default=None
确定质心初始化的随机数生成。使用整数使随机性具有确定性。参见词汇表。
- copy_xbool, default=True
在预计算距离时,先将数据中心化在数值上更准确。如果
copy_x为True(默认),则不修改原始数据。如果为False,则修改原始数据,并在函数返回前恢复,但通过减去再添加数据均值可能会引入微小的数值差异。请注意,如果原始数据不是C连续的,即使copy_x为False,也会进行复制。如果原始数据是稀疏的,但不是CSR格式,即使copy_x为False,也会进行复制。- algorithm{“lloyd”, “elkan”}, default=”lloyd”
要使用的K-means算法。经典的EM式算法是
"lloyd"。使用三角不等式的"elkan"变体在某些具有明确定义聚类的数据集上可能更有效。然而,由于需要分配一个额外的形状为(n_samples, n_clusters)的数组,它会占用更多内存。版本0.18中的变化: 添加了Elkan算法
版本1.1中的变化: 将“full”重命名为“lloyd”,并弃用了“auto”和“full”。将“auto”更改为使用“lloyd”而不是“elkan”。
- return_n_iterbool, default=False
是否返回迭代次数。
- 返回:
- centroidndarray of shape (n_clusters, n_features)
k-means最后一次迭代中找到的质心。
- labelndarray of shape (n_samples,)
label[i]是第i个观测数据最接近的质心的代码或索引。- inertiafloat
惯性准则的最终值(训练集中所有观测数据到最近质心的平方距离之和)。
- 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