一、KMeans
1.1 KMeans
KMeans
是scikit-learn
提供的k
均值算法模型,其原型为:class sklearn.cluster.KMeans(n_clusters=8, init='k-means++', n_init=10,
max_iter=300,tol=0.0001, precompute_distances='auto', verbose=0,
random_state=None, copy_x=True, n_jobs=1,algorithm='auto')
n_clusters
:一个整数,指定分类簇的数量。init
:一个字符串,指定初始均值向量的策略。可以为:'k-means++'
:该初始化策略选择的初始均值向量相互之间都距离较远,它的效果较好。'random'
:从数据集中随机选择 个样本作为初始均值向量。- 或者提供一个数组,数组的形状为
(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'
。
属性:
cluster_centers_
:一个形状为[n_clusters,n_features]
的数组,给出分类簇的均值向量。labels_
:一个形状为[n_samples,]
的数组,给出了每个样本所属的簇的标记。inertia_
:一个浮点数,聚类平方误差 。n_iter_
:一个整数,指定运行的迭代次数。
方法:
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])
:一个浮点数,给出了聚类平方误差的相反数: 。
1.2 MiniBatchKMeans
MiniBatchKMeans
是scikit-learn
提供的 批量k
均值算法模型,其原型为:class sklearn.cluster.MiniBatchKMeans(n_clusters=8, init='k-means++',max_iter=300,
batch_size=100, verbose=0, compute_labels=True,random_state=None,tol=0.0,
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_improvement
个batch
内没有改善时,执行早停。这里的优化目标不是聚类中心的变化,而是平方误差 。
init_size
:一个整数,为加速初始化而随机采样的样本数。通常是 3 倍的batch_size
。它必须大于
n_clusters
。n_init
:一个整数,指定了初始化的尝试次数。与
KMeans
不同,MiniBatchKMeans
只会运行一轮(而不是多轮)。reassignment_ratio
:一个浮点数,控制每次迭代中最多有多少个簇中心被重新赋值。如果该值较大,则模型可能收敛可能时间更长,但是聚类效果也会更好。
其他参数参考
sklearn.cluster.KMeans
。
属性:参考
sklearn.cluster.KMeans
。方法:
partial_fit(X, y=None, sample_weight=None)
:训练k means
一个批次。- 其它方法参考
sklearn.cluster.KMeans
。