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_#
聚类中心的坐标。如果算法在完全收敛之前停止(见
tol和max_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 算法非常快(是可用的最快聚类算法之一),但它会陷入局部最小值。这就是为什么多次重启它可能会有帮助。
如果算法在完全收敛之前停止(由于
tol或max_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 转换为聚类距离空间。