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_#
簇中心的坐标。如果算法在完全收敛之前停止(见
tol和max_iter),这些将与labels_不一致。- Type
形状为 (n_clusters, n_features) 的张量
- labels_#
每个点的标签
- Type
形状为 (n_samples,) 的张量
另请参阅
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算法非常快(可用的最快聚类算法之一),但它会陷入局部最优解。这就是为什么多次重启它可能是有用的。
如果算法在完全收敛之前停止(因为
tol或max_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转换为聚类距离空间。