mars.learn.cluster.KMeans#

class mars.learn.cluster.KMeans(n_clusters=8, init='k-means||', n_init=1, max_iter=300, tol=0.0001, verbose=0, random_state=None, copy_x=True, algorithm='auto', oversampling_factor=2, init_iter=5)[来源]#

K-Means 聚类。

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

Parameters
  • n_clusters (int, default=8) – 要形成的簇的数量以及生成的中心点的数量。

  • init ({'k-means++', 'k-means||', 'random'} or tensor of shape (n_clusters, n_features), default='k-means||') –

    初始化方法,默认为‘k-means||’:

    ’k-means++’ : 以聪明的方式选择初始聚类中心,以加快收敛速度。有关更多详细信息,请参见k_init中的Notes部分。

    ’k-means||’: 可扩展的k-means++。

    ’random’: 从数据中随机选择k个观测值(行)作为初始中心。

    如果传入一个张量,它的形状应该为(n_clusters, n_features),并给出初始中心。

  • n_init (int, default=1) – k-means算法将使用不同的质心种子运行的次数。最终结果将是n_init次连续运行中惯性最好的输出。

  • max_iter (int, default=300) – k-means算法单次运行的最大迭代次数。

  • tol (float, default=1e-4) – 关于惯性的相对容忍度,用于声明收敛。

  • verbose (int, default=0) – 详尽模式。

  • random_state (int, 随机状态实例, 默认=None) – 确定质心初始化的随机数生成。使用一个整数使随机性具有确定性。查看 术语表

  • copy_x (bool, default=True) – 在预计算距离时,先中心化数据会更具数值准确性。如果 copy_x 为 True(默认为 True),则原始数据不会被修改,确保 X 是 C-contiguous。如果为 False,则原始数据会被修改,并在函数返回之前恢复,但通过减去然后添加数据均值可能会引入小的数值差异,在这种情况下也不会确保数据是 C-contiguous,这可能会导致显著的速度下降。

  • 算法 ({"auto", "full", "elkan"}, default="auto") – 要使用的K-means算法。经典的EM风格算法是“full”。“elkan”变体通过使用三角不等式更加高效,但目前不支持稀疏数据。“auto”在密集数据中选择“elkan”,在稀疏数据中选择“full”。

  • oversampling_factor (int, default=2) – 仅适用于 kmeans||,在 kmeans|| 的每次迭代中使用。

  • init_iter (int, default=5) – 仅适用于kmeans||,指示所需的迭代次数。

cluster_centers_#

簇中心的坐标。如果算法在完全收敛之前停止(见 tolmax_iter),这些将与 labels_ 不一致。

Type

形状为 (n_clusters, n_features) 的张量

labels_#

每个点的标签

Type

形状为 (n_samples,) 的张量

inertia_#

样本到其最近聚类中心的平方距离之和。

Type

float

n_iter_#

运行的迭代次数。

Type

int

另请参阅

MiniBatchKMeans

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

备注

k-means问题使用Lloyd算法或Elkan算法解决。

平均复杂度为 O(k n T),其中 n 是样本数量,T 是迭代次数。

最坏情况复杂度由 O(n^(k+2/p)) 给出,其中 n = n_samples,p = n_features。(D. Arthur 和 S. Vassilvitskii,“k-means 方法有多慢?” SoCG2006)

实际上,k-means算法非常快(可用的最快聚类算法之一),但它会陷入局部最优解。这就是为什么多次重启它可能是有用的。

如果算法在完全收敛之前停止(因为 tolmax_iter), labels_cluster_centers_ 将不会是一致的, 即 cluster_centers_ 将不是每个聚类中点的均值。此外,估计器将在最后一次迭代后重新分配 labels_ 以使 labels_ 与训练集上的 predict 一致。

示例

>>> from mars.learn.cluster import KMeans
>>> import mars.tensor as mt
>>> X = mt.array([[1, 2], [1, 4], [1, 0],
...               [10, 2], [10, 4], [10, 0]])
>>> kmeans = KMeans(n_clusters=2, random_state=0, init='k-means++').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.]])
__init__(n_clusters=8, init='k-means||', n_init=1, max_iter=300, tol=0.0001, verbose=0, random_state=None, copy_x=True, algorithm='auto', oversampling_factor=2, init_iter=5)[来源]#

方法

__init__([n_clusters, init, n_init, ...])

fit(X[, y, sample_weight, session, run_kwargs])

计算k-means聚类。

fit_predict(X[, y, sample_weight, session, ...])

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

fit_transform(X[, y, sample_weight, ...])

计算聚类并将X转换为聚类距离空间。

get_params([deep])

获取该估计器的参数。

predict(X[, sample_weight, session, run_kwargs])

预测每个样本属于哪个最接近的聚类。

score(X[, y, sample_weight, session, run_kwargs])

K-means目标上X的值的相反数。

set_params(**params)

设置此估计器的参数。

transform(X[, session, run_kwargs])

将X转换为聚类距离空间。