一、KMeans

1.1 KMeans

  1. KMeansscikit-learn提供的 k均值算法模型,其原型为:

    1. class sklearn.cluster.KMeans(n_clusters=8, init='k-means++', n_init=10,
    2. max_iter=300,tol=0.0001, precompute_distances='auto', verbose=0,
    3. random_state=None, copy_x=True, n_jobs=1,algorithm='auto')
    • n_clusters:一个整数,指定分类簇的数量。

    • init:一个字符串,指定初始均值向量的策略。可以为:

      • 'k-means++':该初始化策略选择的初始均值向量相互之间都距离较远,它的效果较好。
      • 'random':从数据集中随机选择 一、KMeans - 图1 个样本作为初始均值向量。
      • 或者提供一个数组,数组的形状为 (n_clusters,n_features),该数组作为初始均值向量。

      K均值算法总能够收敛,但是其收敛情况高度依赖于初始化的均值。有可能收敛到局部极小值。因此通常都是用多组初始均值向量来计算若干次,选择其中最优的那一次。而k-means++策略选择的初始均值向量可以一定程度上的解决这个问题。

    • n_init:一个整数,指定了k均值算法运行的次数。

      每次都会选择一组不同的初始化均值向量,最终算法会选择最佳的分类簇来作为最终的结果。

    • max_iter:一个整数,指定了单轮k均值算法中,最大的迭代次数。

      算法总的最大迭代次数为 max_iter * n_init

    • precompute_distances:指定是否提前计算距离。如果提前计算距离,则需要更多的内存,但是算法会运行的更快。

      可以为布尔值或者字符串 'auto'

      • 'auto':如果 n_samples*n_clusters > 12 million,则不提前计算。
      • True:总是提前计算。
      • False:总是不提前计算。
    • tol:指定收敛阈值。

    • n_jobs:指定并行度。

    • verbose:指定开启/关闭迭代中间输出日志功能。

    • random_state:指定随机数种子。

    • copy_x:布尔值,主要用于precompute_distances=True的情况。

      • 如果为True,则预计算距离的时候,并不修改原始数据。
      • 如果为False,则预计算距离的时候,会修改原始数据用以节省内存;然后当算法结束的时候,会将原始数据还原。但是可能会因为浮点数的表示,会有一些精度误差。
    • algorithm:一个字符串,指定采用的算法。可以为:

      • 'full':使用经典的EM 风格的算法。
      • 'elkan':使用'elkan' 变种算法。它通过使用三角不等式来优化算法,但是不支持稀疏数据。
      • 'auto':自动选择算法。对于稀疏数据,使用'full';对于密集数据,使用'elkan'
  2. 属性:

    • cluster_centers_:一个形状为[n_clusters,n_features]的数组,给出分类簇的均值向量。
    • labels_:一个形状为[n_samples,] 的数组,给出了每个样本所属的簇的标记。
    • inertia_:一个浮点数,聚类平方误差 一、KMeans - 图2
    • n_iter_:一个整数,指定运行的迭代次数。
  3. 方法:

    • fit(X[,y ,sample_weight]):训练模型。
    • fit_predict(X[, y, sample_weight]):训练模型并执行聚类,返回每个样本所属的簇标记。
    • predict(X, sample_weight):返回每个样本所属的簇标记。
    • transform(X):将数据集 X 转换到cluster center space
    • fit_transform(X[, y, sample_weight]):训练模型并执行聚类,将数据集 X 转换到cluster center space
    • score(X[, y, sample_weight]):一个浮点数,给出了聚类平方误差的相反数:一、KMeans - 图3

1.2 MiniBatchKMeans

  1. MiniBatchKMeansscikit-learn提供的 批量k均值算法模型,其原型为:

    1. class sklearn.cluster.MiniBatchKMeans(n_clusters=8, init='k-means++',max_iter=300,
    2. batch_size=100, verbose=0, compute_labels=True,random_state=None,tol=0.0,
    3. max_no_improvement=10, init_size=None, n_init=3, reassignment_ratio=0.01)
    • batch_size:一个整数,指定batch 大小。

    • compute_labels:一个布尔值,指定当算法收敛时,是否对全量数据集重新计算其完整的簇标记。

    • tol:一个浮点数,指定收敛阈值。它可以用于早停。

      当迭代前后聚类中心的变化小于它时,执行早停。如果为0.0,则不开启这种早停。

    • max_no_improvement:一个整数,用于控制早停的轮数。如果优化目标在连续 max_no_improvementbatch 内没有改善时,执行早停。

      这里的优化目标不是聚类中心的变化,而是平方误差 一、KMeans - 图4

    • init_size:一个整数,为加速初始化而随机采样的样本数。通常是 3 倍的 batch_size

      它必须大于 n_clusters

    • n_init:一个整数,指定了初始化的尝试次数。

      KMeans 不同,MiniBatchKMeans 只会运行一轮(而不是多轮)。

    • reassignment_ratio:一个浮点数,控制每次迭代中最多有多少个簇中心被重新赋值。

      如果该值较大,则模型可能收敛可能时间更长,但是聚类效果也会更好。

    • 其他参数参考sklearn.cluster.KMeans

  2. 属性:参考sklearn.cluster.KMeans

  3. 方法:

    • partial_fit(X, y=None, sample_weight=None):训练k means 一个批次。
    • 其它方法参考sklearn.cluster.KMeans