python KMeans用法选项示例详解
文章目录
- python KMeans用法选项示例详解
- sklearn.cluster.KMeans
- 类型
- 参数
- 示例
- 注意事项
- 参考链接
sklearn.cluster.KMeans
类型
class sklearn.cluster.KMeans(n_clusters=8, *, init='k-means++', n_init='warn', max_iter=300, tol=0.0001, verbose=0, random_state=None, copy_x=True, algorithm='lloyd')[source]
K-Means聚类。
在用户指南中了解更多信息。
参数
-
n_clusters:int,默认值为8
要形成的簇的数量以及要生成的质心的数量。 -
init:{‘k-means++’,‘random’},callable或形状为(n_clusters,n_features)的数组样式,默认值为’k-means ++’
初始化方法:-
‘k-means ++’:使用基于点对整体惯性贡献的经验概率分布对初始簇质心进行采样选择。该技术加速了收敛。实现的算法是“贪婪的k-means ++”。它与普通的k-means ++ 不同之处在于,在每个采样步骤中进行多次试验,并从中选择最佳质心。
-
‘random’:从数据中随机选择n_clusters个观测值(行)作为初始质心。
-
如果传递一个数组,则应为形状为(n_clusters,n_features),并提供初始中心点。
-
如果传递一个可调用对象,则应接受参数X,n_clusters和随机状态,并返回初始化结果。
有关如何使用不同初始化策略的示例,请参见标题为“手写数字数据上的K-Means聚类演示”的示例。
-
-
n_init:'auto’或int,默认值为10
以不同质心种子运行k-means算法的次数。最终结果是n_init连续运行中具有最佳惯性的输出。对于稀疏高维问题,建议进行多次运行(请参阅使用k-means聚类稀疏数据)。当n_init='auto’时,运行次数取决于init的值:如果使用init='random’或init是可调用对象,则为10;如果使用init='k-means++'或init是一个数组样式,则为1。
-
max_iter:int,默认值为300
单次运行的k-means算法的最大迭代次数。 -
tol:float,默认值为0.0001
关于两个连续迭代之间簇质心差异的Frobenius范数的相对容忍度,以宣布收敛。 -
verbose:int,默认值为0
冗余模式。 -
random_state:int,RandomState实例或None,默认值为None
确定质心初始化的随机数生成。使用整数可以使随机性确定性。请参阅术语表。 -
copy_x:bool,默认值为True
在预先计算距离时,首先将数据居中更准确。如果copy_x为True(默认值),则原始数据不会被修改。如果为False,则原始数据将被修改,并在函数返回之前放回,但是通过减去和添加数据的平均值可能引入小的数值差异。请注意,如果原始数据不是C连续的,则即使copy_x为False,也将进行复制。如果原始数据是稀疏的,但不是CSR格式,则即使copy_x为False,也将进行复制。 -
algorithm:{“lloyd”,“elkan”,“auto”,“full”},默认值为“lloyd”
要使用的k-means算法。经典的EM风格算法是“lloyd”。通过使用三角不等式,“elkan”变体可以在某些具有明确定义簇的数据集上更高效。然而,由于需要分配一个形状为(n_samples,n_clusters)的额外数组,因此它的内存占用量更大。“auto”和“full”已弃用,并将在Scikit-Learn 1.3中删除。它们都是“lloyd”的别名。
属性:
-
cluster_centers_:形状为(n_clusters,n_features)的ndarray
簇中心的坐标。如果算法在完全收敛之前停止(参见tol和max_iter),则这些坐标将与labels_不一致。 -
labels_:形状为(n_samples,)的ndarray
每个样本的标签。 -
inertia_:float
样本到最近簇中心的平方距离之和,如果提供了样本权重,则加权。 -
n_iter_:int
运行次数。 -
n_features_in_:int
fit期间看到的特征数。
方法:
-
fit(X[, y, sample_weight])
计算k-means聚类。 -
fit_predict(X[, y, sample_weight])
计算簇中心并预测每个样本的簇索引。 -
fit_transform(X[, y, sample_weight])
计算聚类并将X转换为簇-距离空间。 -
predict(X[, sample_weight])
预测每个样本在X中属于的最近簇。 -
score(X[, y, sample_weight])
与K-means目标函数的值相反。 -
set_fit_request(*[, sample_weight])
请求传递给fit方法的元数据。 -
set_output(*[, transform])
设置输出容器。 -
set_params(**params)
设置此估计器的参数。 -
set_predict_request(*[, sample_weight])
请求传递给predict方法的元数据。 -
set_score_request(*[, sample_weight])
请求传递给score方法的元数据。 -
transform(X)
将X转换为簇-距离空间。
示例
>>> from sklearn.cluster import KMeans
>>> import numpy as np
>>> X = np.array([[1, 2], [1, 4], [1, 0],
... [10, 2], [10, 4], [10, 0]])
>>> kmeans = KMeans(n_clusters=2, random_state=0, n_init="auto").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.]])
请参阅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。有关详细信息,请参见“How slow is the k-means method?” D. Arthur and S. Vassilvitskii - SoCG2006。
实际上,k-means算法非常快(是可用的最快聚类算法之一),但会陷入局部最小值。这就是为什么多次重启它可能很有用的原因。
如果算法在完全收敛之前停止(因为tol或max_iter),labels_和cluster_centers_将不一致,即cluster_centers_将不是每个簇中点的均值。此外,估计器将在最后一次迭代后重新分配labels_,以使labels_与对训练集进行预测时保持一致。