sklearn聚类之—KMeans

2023-05-16

                                        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或者簇内平方和的标准的质心

                                                                                 \sum_{i=0}^{n}\min_{\mu_j \in C}(||x_j - \mu_i||^2)

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

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

K-means 通常被称为 Lloyd’s algorithm(劳埃德算法)。在基本术语中,算法有三个步骤。、 第一步是选择 initial centroids (初始质心),最基本的方法是从 X 数据集中选择 k 个样本。初始化完成后,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.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.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sklearn聚类之—KMeans 的相关文章

  • 机器学习(三)K-means聚类(手肘法、轮廓系数、可视化代码)

    K means聚类 聚类是无监督学习当中非常重要的一部分 能够在没有标签的情况下将数据分类 说到聚类 最常用也是最重要的一个算法就是K means算法 算法介绍 K means是一种非常简单快速高效的算法 只需要迭代几次即可 其原理用一句话
  • 4-2 过滤器法

    4 2 过滤器法 请参考 数据准备和特征工程 中的相关章节 调试如下代码 注意 本节内容因为要耗费比较大的内存 在线平台有可能无法支持 可以下载到本地执行 基础知识 from sklearn datasets import load iri
  • sklearn的make_circles和make_moons生成数据

    关于make circles and make moons生成环形形状和月亮形状数据 转载来源 https blog csdn net dataningwei article details 53649330 make circles sk
  • Spark MLLib Kmeans 来自数据帧,然后再次返回

    我的目标是使用 Spark 1 3 1 MLLib 将 kmeans 聚类算法应用于非常大的数据集 我已经使用 Spark 中的 hiveContext 调用了 HDFS 中的数据 并且最终希望以这种方式将其放回原处 以这种格式 I D c
  • KMeans 聚类后的聚类点 (scikit learn)

    我已经使用 sklearn 使用 Kmeans 完成了聚类 虽然它有一种打印质心的方法 但我发现 scikit learn 没有一种方法来打印每个簇的簇点 或者我到目前为止还没有看到它 这很奇怪 有没有一种巧妙的方法来获取每个簇的簇点 我目
  • 具有非常大矩阵的 K 均值

    我必须在一个非常大的矩阵 大约 300 000x100 000 个值 超过 100Gb 上执行 k 均值聚类 我想知道我是否可以使用 R 软件或 weka 来执行此操作 我的计算机是一台多处理器 具有 8GB 内存和数百 GB 可用空间 我
  • 有哪些实现半监督(约束)聚类的软件包?

    我想对半监督 约束 聚类进行一些实验 特别是作为实例级成对约束 必须链接或无法链接约束 提供的背景知识 我想知道有没有好的开源包实现半监督聚类 我尝试查看 PyBrain mlpy scikit 和 Orange 但找不到任何约束聚类算法
  • 如何使用 R 中的 k 均值聚类技术获得与数据相对应的聚类编号? [关闭]

    很难说出这里问的是什么 这个问题模棱两可 含糊不清 不完整 过于宽泛或言辞激烈 无法以目前的形式合理回答 如需帮助澄清此问题以便重新打开 访问帮助中心 我通过 k 均值聚类方法对数据进行聚类 如何在 R 中使用 k 均值聚类技术获得与数据相
  • 使用 clusplot 绘制以 0 为中心坐标的聚类

    我正在尝试绘制 GIS 坐标 特别是东向和北向相似的英国国家网格坐标 194630000 562220000 我可以使用 Cluster 库中的 clusplot 绘制这些图 clusplot df2 k means fit cluster
  • K-Medoids / K-Means 算法。两个或多个簇代表之间距离相等的数据点

    我一直在研究和学习基于分区的聚类算法 例如 K means 和 K Medoids 我了解到 与 K 均值相比 K 中心点对异常值的鲁棒性更强 然而 我很好奇如果在分配数据点期间 两个或多个簇代表在数据点上具有相同的距离 会发生什么 您将把
  • 如何设置Spark Kmeans初始中心

    我正在使用 Spark ML 来运行 Kmeans 我有一堆数据和三个现有中心 例如这三个中心是 1 0 1 0 1 0 5 0 5 0 5 0 9 0 9 0 9 0 那么我如何表明 Kmeans 中心是上述三个向量 我看到 Kmean
  • 使用 scikit-learn.k-means 库输出最接近每个聚类中心的 50 个样本

    我使用 python scikit learn 库在 5000 多个样本上安装了 k 均值算法 我想要将最接近聚类中心的 50 个样本作为输出 我该如何执行这个任务 If km是 k means 模型 到j数组中每个点的第一个质心X is
  • 如何在 K - 均值算法中优化 K [重复]

    这个问题在这里已经有答案了 可能的重复 使用 k 均值聚类时如何确定 k https stackoverflow com questions 1793532 how do i determine k when using k means c
  • 快速 (< n^2) 聚类算法

    我有 100 万个 5 维点 需要将它们分组为 k 个簇 其中 k 但 我需要运行时间远低于 n 2 n log n 左右应该没问题 我进行此聚类的原因是为了避免计算所有 n 个点的距离矩阵 这需要 n 2 时间或多个小时 而是我只想计算聚
  • 在 K 均值算法 (MATLAB) 中使用绝对皮尔逊相关性作为距离

    我需要使用相关距离进行一些聚类 但我需要绝对皮尔逊距离 而不是使用定义为 d 1 r 的内置 距离 相关 在我的应用程序中 反相关数据应该获得相同的集群 ID 现在 当使用 kmeans 函数时 我得到的质心高度反相关 我希望通过组合它们来
  • R - “princomp”只能与比变量更多的单位一起使用

    我正在使用 R 软件 R Commander 对我的数据进行聚类 我的数据有一个较小的子集 包含 200 行和大约 800 列 尝试 kmeans 聚类并在图表上绘制时出现以下错误 princomp 只能与比变量更多的单位一起使用 然后我创
  • 对一维数据进行最佳聚类? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有没有人有一篇论文解释如何CKmeans 1d dp http cran r project org
  • 如何在Python中的二值图像上使用kmeans聚类?

    我试图对两个不同的人采取二元面具 其他一切都是黑色的 现在我想使用将每个人分组到他们自己的集群中K means这样我最终就可以在它们周围绘制边界框 这是我到目前为止的代码 def kmeans img k values range 1 5
  • 使用 scikit 包在 Python 中绘制集群区域的边界

    这是我处理 3 个属性 x y 值 中的数据聚类的简单示例 每个样本代表其位置 x y 及其所属变量 我的代码发布在这里 x np arange 100 200 1 y np arange 100 200 1 value np random
  • KMeans 对不平衡数据进行聚类

    我有一组包含 50 个特征 c1 c2 c3 的数据 行数超过 80k 每行包含标准化数值 范围 0 1 它实际上是一个标准化的虚拟变量 其中一些行只有很少的特征 3 4 即如果没有值则分配 0 大多数行大约有 10 20 个特征 我使用

随机推荐