欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

sklearn聚类之—KMeans

程序员文章站 2022-07-14 11:50:23
...

                                        sklearn聚类之—KMeans


未标记的数据的Clustering(聚类),可以是使用模块sklearn.cluster来实现

每个clustering algorithm(聚类算法)有两个变体:一个是class,他实现了fit的方法来学习训练数据的cluster,还有一个函数,是给定训练数据,返回与不同的cluster对应的证书标签数据,对于class,training data 上的标签可以在labels_属性中找到。

输入数据

需要注意的一点是,该模块中实现的算法可以采用不同种类的 matrix (矩阵)作为输入。所有这些都接受 shape [n_samples, n_features] 的标准数据矩阵。 这些可以从以下的 sklearn.feature_extraction模块的 classes (类)中获得。对于 AffinityPropagationSpectralClustering 和 DBSCAN 也可以输入 shape [n_samples, n_samples] 的相似矩阵。这些可以从 sklearn.metrics.pairwise 模块中的函数获得。

1.理论

  kMeans算法通过试图分离n个相同方差组样本来聚集数据,minimizing(最小化)称为inertia或者within-cluster-sum-of-squares(簇内平方和)的criterion(标准)。该算法需要制定number of clusters(簇的数量),他可以很好的扩展到大量样本并且已经被广泛引用于很多不同的领用的应用领域。

该算法是将一组N样本X划分成K不相交的簇C,每个都用cluster中的样本的均值描述,这个means(均值)通常被称为cluster(簇)的质心(centroids),注意,它们一般不是从X中挑选出来的点,虽然他们是出于同一个空间(算法初始化点的时候是在同一个范围内的随机取K个点)。kmeans算法旨在选择最小化inertia或者簇内平方和的标准的质心

                                                                                 sklearn聚类之—KMeans

Inertia(惯性), 或 the within-cluster sum of squares(簇内和平方差) criterion(标准),可以被认为是 internally coherent clusters (内部相干聚类)的 measure (度量)。 它有各种缺点:

  • 对细长的簇或者不规则形状的分类不佳
  • 在高维度空间中会出现膨胀。需要降为来减轻该问题(计算距离是通过欧几里得来计算的)

K-means 通常被称为 Lloyd’s algorithm(劳埃德算法)。在基本术语中,算法有三个步骤。、 第一步是选择 initial centroids (初始质心),最基本的方法是从 sklearn聚类之—KMeans 数据集中选择 sklearn聚类之—KMeans 个样本。初始化完成后,K-means 由两个其他步骤之间的循环组成。 第一步将每个样本分配到其 nearest centroid (最近的质心)。第二步通过取分配给每个先前质心的所有样本的平均值来创建新的质心。计算旧的和新的质心之间的差异,并且算法重复这些最后的两个步骤,直到该值小于阈值。换句话说,算法重复这个步骤,直到质心不再显著移动。

给定足够的时间,K-means 将总是收敛的,但这可能是 local minimum (局部最小)的。这很大程度上取决于 initialization of the centroids (质心的初始化)。 因此,通常会进行几次 different initializations of the centroids (初始化不同质心)的计算。帮助解决这个问题的一种方法是 k-means++ 初始化方案,它已经在 scikit-learn 中实现(使用 init='k-means++' 参数)。 这将初始化 centroids (质心)(通常)彼此远离,导致比随机初始化更好的结果。

2.用法

sklearn聚类之—KMeans

sklearn.cluster.KMeans

  参数 描述
参数 n_clusters : int, optional, default: 8 要形成的簇的数目以及要生成的质心的数目。
init : {‘k-means++’, ‘random’ or an ndarray}

‘k-means++’:选择初始聚类中心的K-均值聚类的智能方式,以加快收敛。

random:从初始质心数据中随机选择K个观测值(行)。

ndarray:它应该是形状(n-簇,n-特征)并给出初始中心。

n_init : int, default: 10 用不同质心种子运行k-均值算法的次数。最后的结果将是连续运行在惯性方面的最佳输出。
max_iter : int, default: 300 最大迭代次数
tol : float, default: 1e-4 限制平方误差的来防止局部最优化
precompute_distances : {‘auto’, True, False}

‘auto’ : 如果n*样本*n群集>1200万,则不预先计算距离。这对应于使用双精度的每个作业大约100MB的开销。

True :总是预先计算距离

False:从来不预先计算距离

 

verbose : int, default 0 冗长模式
random_state : int, RandomState instance or None, optional, default: None 如果是int,是随机数生成器使用的种子;如果RandomState实例,._state是随机数生成器;如果None,则随机数生成器是np.random使用的RandomState实例。
copy_x : boolean, default True 是否复制训练集
n_jobs : int 并行的数量
algorithm : “auto”, “full” or “elkan”, default=”auto” k-均值算法使用。经典的EM风格算法是“满”的。使用三角不等式,“ELKAN”变异更有效,但目前不支持稀疏数据。“自动”为密集数据选择“ELKAN”,为稀疏数据选择“满”。
  cluster_centers_ : array, [n_clusters, n_features] 质心
  labels_ : : 分类点标签
  inertia_ : float 样本距离与它们最接近的聚类中心的距离之和。
from sklearn.cluster import KMeans
import numpy as np
X = np.array([[1, 2], [1, 4], [1, 0],
              [4, 2], [4, 4], [4, 0]])
kmeans = KMeans(n_clusters=2, random_state=0).fit(X)
kmeans.labels_

kmeans.predict([[0, 0], [4, 4]])

kmeans.cluster_centers_

  常用方法

 

fit(X[, y]) Compute k-means clustering.
fit_predict(X[, y]) Compute cluster centers and predict cluster index for each sample.
fit_transform(X[, y]) Compute clustering and transform X to cluster-distance space.
get_params([deep]) Get parameters for this estimator.
predict(X) Predict the closest cluster each sample in X belongs to.
score(X[, y]) Opposite of the value of X on the K-means objective.
set_params(**params) Set the parameters of this estimator.
transform(X) Transform X to a cluster-distance space.