sklearn.cluster.KMeans

class sklearn.cluster.KMeans(n_clusters=8, *, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='deprecated', verbose=0, random_state=None, copy_x=True, n_jobs='deprecated', algorithm='auto')

[源码]

K-均值聚类

用户指南中阅读更多内容。

参数 方法
n_clusters int, default=8
要形成的簇数以及要生成的质心数。
init {‘k-means++’, ‘random’, ndarray, callable}, default=’k-means++’
初始化方法:
‘k-means++’:明智地选择初始聚类中心进行k均值聚类,加快收敛速度.有关详细信息,请参阅k_init中的Notes部分。
‘random’:从初始质心的数据中随机选择n_clusters观测(行)。
如果一个ndarray被传递,它应该是形状的(n_clusters, n_features),并给出初始中心。
如果传递了一个可调用函数,它应该接受参数X、n_clusters和一个随机状态,并返回一个初始化。
max_iter int, default=300
相对容忍度与Frobenius范数, 连续两次迭代之间的聚类中心的差异声明收敛。不建议将其设置为tol=0,因为由于舍入错误,可能永远不会声明收敛。用一个很小的数字代替。
precompute_distances {‘auto’, True, False}, default=’auto’
预计算距离(速度更快,但占用更多内存)。
‘auto’:如果n个样本n_samples * n_clusters > 1200万,不预先计算距离。这相当于使用双精度的每个作业大约100 MB的开销。
True :总是预先计算距离
False:永远不要预先计算距离。

自0.23版本起被弃用:在0.22版本中不推荐使用‘precompute_distances’,并将在0.25中删除。它没有效果。
verbose int, default=0
详细模式
random_state int, RandomState instance, default=None
确定用于质心初始化的随机数生成。使用整数使随机性确定。见Glossary
copy_x bool, default=True
当预计算距离时,首先对数据进行中心化比较精确.如果copy_x为True(默认值),则不会修改原始数据。如果为False,则对原始数据进行修改,并在函数返回之前将其放回,但可以通过减去和添加数据均值来引入较小的数值差异。注意,如果原始数据不是C-contiguous的,即使copy_x为False,也会复制。如果原始数据稀疏,但不采用CSR格式,即使copy_x为false,也会复制。
n_jobs int, default=None
用于计算的OpenMP线程数。并行性是在主cython循环上按样本顺序进行的,该循环将每个样本分配到其最近的中心。
None-1意味着使用所有处理器。

从0.23版n_jobs开始不推荐使用*:从0.23版*开始不推荐使用,并将在0.25版中删除。
algorithm {“auto”, “full”, “elkan”}, default=”auto”
表示K-means要使用的算法。经典的EM式算法是“full”的。通过三角不等式,对于具有定义良好的簇的数据,“elkan”变化更为有效。但是,由于分配了一个额外的形状数组(n_samples, n_clusters),所以内存更多。
目前,“auto”(为向后兼容而保留)选择了“Elkan”,但它将来可能会改变,以获得更好的启发式。

*在版本0.18中更改:*添加了Elkan算法
属性 说明
cluster_centers_ ndarray of shape (n_clusters, n_features)
簇中心坐标。如果算法在完全收敛之前停止(请参阅tolmax_iter),这些将与labels_比配。
labels_ ndarray of shape (n_samples,)
每一点的标签
inertia_ float
样本到其最近的聚类中心的平方距离之和。
n_iter_ int
运行的迭代次数

另见

  • MiniBatchKMeans

    替代性在线实施,使用迷你批次对中心位置进行增量更新。对于大规模学习(例如n_samples> 10k),MiniBatchKMeans可能比默认的批处理实现要快得多。

k-均值问题采用Lloyd’s算法或Elkan’s算法求解。

平均复杂度为O(KnT),n为样本数,T为迭代次数。

最坏的情形复杂度由O(n^(k+2/p))给出,n=n_samples,p=n_features。 (D. Arthur and S. Vassilvitskii, ‘How slow is the k-means method?’ SoCG2006)

在实践中,k均值算法是非常快速的(可用的最快的聚类算法之一),但它是在局部收敛极小。这就是为什么多次重新启动它是有用的。

如果算法在完全收敛之前停止(因为tolmax_iter), labels_cluster_centers将不一致,也就是说,cluster_centers不会是每个簇中各点的均值。此外,估计器将在最后一次迭代后重新分配 labels_,使labels_与训练集上的预测一致。

示例

>>> from sklearn.cluster import KMeans
>>> import numpy as np
>>> X = np.array([[12], [14], [10],
...               [102], [104], [100]])
>>> kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
>>> kmeans.labels_
array([111000], dtype=int32)
>>> kmeans.predict([[00], [123]])
array([10], dtype=int32)
>>> kmeans.cluster_centers_
array([[10.,  2.],
       [ 1.,  2.]])

方法

方法 说明
fit(self, X[, y, sample_weight]) 计算k-均值聚类
fit_predict(self, X[, y, sample_weight]) 计算聚类中心并预测每个样本的聚类索引
fit_transform(self, X[, y, sample_weight]) 计算聚类并将X变换成簇距离空间
get_params(self[, deep]) 获取此估计器的参数
predict(self, X[, sample_weight]) 预测X中每个样本所属的最接近的聚类
set_params(self, **params) 设置此估计器的参数
transform(self, X) 将X转换为簇距离空间
__init__(self, n_clusters=8, *, init='k-means++', n_init=10, max_iter=300, tol=0.0001, precompute_distances='deprecated', verbose=0, random_state=None, copy_x=True, n_jobs='deprecated', algorithm='auto')

[源码]

初始化self。请参阅help(type(self))以获得准确的说明。

fit(self, X, y=None, sample_weight=None)

[源码]

计算k-均值聚类

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features), or (n_samples, n_samples)
要聚类的训练实例。必须注意的是,数据将转换为C顺序,如果给定的数据不是C-连续的,这将导致内存副本。如果一个稀疏矩阵被传递,如果它不是CSR格式,它将被复制。
y Ignored
未使用,在此按约定呈现为API一致性。
sample_weight array-like of shape (n_samples,), default=None
X中每个观测值的权重,如果没有,则所有观测值都被赋予相同的权重。
返回值 说明
self 拟合的估计器
fit_predict(self, X, y=None, sample_weight=None)

[源码]

计算聚类中心并预测每个样本的聚类索引

方便方法;等价于调用fit(X)后再predict(X)。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
要转换的新数据
y Ignored 未使用,在此按约定呈现为API一致性。
sample_weight array-like of shape (n_samples,), default=None
X中每个观测值的权重,如果没有,则所有观测值都被赋予相同的权重。
返回值 说明
labels ndarray of shape (n_samples,)
每个样本所属的聚类索引
fit_transform(self, X, y=None, sample_weight=None)

[源码]

计算聚类并将X变换成簇距离空间

等效于 fit(X).transform(X),但更有效地实现。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
要转换的新数据
y Ignored
未使用,在此按约定呈现为API一致性。
sample_weight array-like of shape (n_samples,), default=None
X中每个观测值的权重,如果没有,则所有观测值都被赋予相同的权重。
返回值 说明
labels array of shape (n_samples, n_clusters)
X在新空间中的变换
get_params(self, deep=True)

[源码]

获取此估计器的参数

参数 说明
deep bool, default=True
如果为True,则将返回此估计器的参数和所包含的作为估计量的子对象。
返回值 说明
params mapping of string to any
映射到其值的参数名称
predict(self, X, sample_weight=None)

[源码]

预测X中每一个样本所属的最接近的聚类。

在矢量量化文献中,cluster_centers_被称为代码簿, predict返回的每个值都是代码簿中最接近的代码的索引。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
要转换的新数据
sample_weight array-like of shape (n_samples,), default=None
X中每个观测值的权重,如果没有,则所有观测值都被赋予相同的权重。
返回值 说明
labels ndarray of shape (n_samples,)
每个样本所属的聚类索引
score(self, X, y=None, sample_weight=None)

[源码]

K-均值目标上X值的相反

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
要转换的新数据
y Ignored
未使用,在此按约定呈现为API一致性。
sample_weight array-like of shape (n_samples,), default=None
X中每个观测值的权重,如果没有,则所有观测值都被赋予相同的权重。
返回值 说明
score float
与K-均值目标上的X值相反.
set_params(self, **params)

[源码]

设置此估计器的参数

该方法适用于简单估计器以及嵌套对象(例如pipelines)。后者具有表单的 <component>__<parameter>参数,这样就可以更新嵌套对象的每个组件。

参数 说明
**params dict
估计器参数
返回值 说明书
self object
估计器实例
transform(self, X)

[源码]

将X转换成簇距空间。

在新的空间中,每个维度都是到簇中心的距离。请注意,即使X是稀疏的,转换返回的数组通常也是密集的。

参数 说明
X {array-like, sparse matrix} of shape (n_samples, n_features)
要转换的新数据
返回值 说明
labels array of shape (n_samples, n_clusters)
X在新空间中的变换