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) 簇中心坐标。如果算法在完全收敛之前停止(请参阅 tol 和max_iter ),这些将与labels_ 比配。 |
labels_ | ndarray of shape (n_samples,) 每一点的标签 |
inertia_ | float 样本到其最近的聚类中心的平方距离之和。 |
n_iter_ | int 运行的迭代次数 |
另见
替代性在线实施,使用迷你批次对中心位置进行增量更新。对于大规模学习(例如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均值算法是非常快速的(可用的最快的聚类算法之一),但它是在局部收敛极小。这就是为什么多次重新启动它是有用的。
如果算法在完全收敛之前停止(因为tol
或max_iter
), labels_
和cluster_centers
将不一致,也就是说,cluster_centers
不会是每个簇中各点的均值。此外,估计器将在最后一次迭代后重新分配 labels_
,使labels_
与训练集上的预测一致。
示例
>>> from sklearn.cluster import KMeans
>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0],
... [10, 2], [10, 4], [10, 0]])
>>> kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
>>> kmeans.labels_
array([1, 1, 1, 0, 0, 0], dtype=int32)
>>> kmeans.predict([[0, 0], [12, 3]])
array([1, 0], 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在新空间中的变换 |