maxframe.learn.cluster.KMeans#

class maxframe.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-均值聚类。

更多信息请参阅 用户指南

参数:
  • 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 中的说明。 '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, RandomState instance, default=None) -- 确定质心初始化的随机数生成方式。使用整数可使随机性变为确定性的。详见 术语表

  • copy_x (bool, default=True) -- 在预先计算距离时,首先将数据居中会更精确。如果 copy_x 为 True(默认),则原始数据不会被修改,以确保 X 是 C 连续的。如果为 False,则原始数据会被修改,并在函数返回前恢复,但减去并加上数据均值可能会引入微小的数值差异,在这种情况下也无法确保数据是 C 连续的,这可能导致显著的性能下降。

  • algorithm ({"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_ 不一致。

类型:

形状为 (n_clusters, n_features) 的张量

labels_#

每个点的标签

类型:

形状为 (n_samples,) 的张量

inertia_#

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

类型:

浮点数

n_iter_#

运行的迭代次数。

类型:

整数

参见

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 maxframe.learn.cluster import KMeans
>>> import maxframe.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).execute()
>>> kmeans.labels_
array([1, 1, 1, 0, 0, 0], dtype=int32)
>>> kmeans.predict([[0, 0], [12, 3]]).execute()
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__

execute

fetch

fit

计算 k-means 聚类。

fit_predict

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

fit_transform

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

predict

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

score

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

transform(X[, session, run_kwargs])

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