【Scikit-Learn 中文文档】21 聚类 - 无监督学习 - 用户指南 | ApacheCN

2023-12-29 16:50

本文主要是介绍【Scikit-Learn 中文文档】21 聚类 - 无监督学习 - 用户指南 | ApacheCN,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

中文文档: http://sklearn.apachecn.org/cn/stable/modules/clustering.html

英文文档: http://sklearn.apachecn.org/en/stable/modules/clustering.html

官方文档: http://scikit-learn.org/stable/

GitHub: https://github.com/apachecn/scikit-learn-doc-zh(觉得不错麻烦给个 Star,我们一直在努力)

贡献者: https://github.com/apachecn/scikit-learn-doc-zh#贡献者

关于我们: http://www.apachecn.org/organization/209.html


2.3. 聚类

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

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

输入数据

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

2.3.1. 聚类方法概述

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

k-means 算法将一组 N 样本 X 划分成 K 不相交的 clusters (簇) C, 每个都用 cluster (该簇)中的样本的均值 \mu_j 描述。 这个 means (均值)通常被称为 cluster(簇)的 “centroids(质心)”; 注意,它们一般不是从 X 中挑选出的点,虽然它们是处在同一个 space(空间)。 K-means(K-均值)算法旨在选择最小化 inertia(惯性) 或 within-cluster sum of squared(簇内和的平方和)的标准的 centroids(质心):

\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 (度量)。 它有各种缺点:

  • Inertia(惯性)假设 clusters (簇)是 convex(凸)的和 isotropic (各项同性),这并不是总是这样。它对 elongated clusters (细长的簇)或具有不规则形状的 manifolds 反应不佳。
  • Inertia(惯性)不是一个 normalized metric(归一化度量): 我们只知道 lower values (较低的值)是更好的,并且 零 是最优的。但是在 very high-dimensional spaces (非常高维的空间)中,欧几里得距离往往会变得 inflated (膨胀)(这就是所谓的 “curse of dimensionality (维度诅咒/维度惩罚)”)。在 k-means 聚类之前运行诸如 PCA 之类的 dimensionality reduction algorithm (降维算法)可以减轻这个问题并加快计算速度。
../_images/sphx_glr_plot_kmeans_assumptions_0011.png

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

../_images/sphx_glr_plot_kmeans_digits_0011.png

K-means 相当于具有 small, all-equal, diagonal covariance matrix (小的全对称协方差矩阵)的 expectation-maximization algorithm (期望最大化算法)。

该算法也可以通过 `Voronoi diagrams(Voronoi图)<https://en.wikipedia.org/wiki/Voronoi_diagram>`_ 的概念来理解。首先使用 current centroids (当前质心)计算点的 Voronoi 图。 Voronoi 图中的每个 segment (段)都成为一个 separate cluster (单独的簇)。其次,centroids(质心)被更新为每个 segment (段)的 mean(平均值)。然后,该算法重复此操作,直到满足停止条件。 通常情况下,当 iterations (迭代)之间的 objective function (目标函数)的相对减小小于给定的 tolerance value (公差值)时,算法停止。在此实现中不是这样: 当质心移动小于 tolerance (公差)时,迭代停止。

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

可以给出一个参数,以允许 K-means 并行运行,称为 n_jobs。给这个参数一个正值使用许多处理器(默认值: 1)。值 -1 使用所有可用的处理器,-2 使用一个,等等。Parallelization (并行化)通常以 cost of memory(内存的代价)加速计算(在这种情况下,需要存储多个质心副本,每个作业使用一个)。

Warning

   

当 numpy 使用 Accelerate 框架时,K-Means 的并行版本在 OS X 上损坏。这是 expected behavior (预期的行为): Accelerate 可以在 fork 之后调用,但是您需要使用 Python binary(二进制)(该多进程在 posix 下不执行)来执行子进程。

K-means 可用于 vector quantization (矢量量化)。这是使用以下类型的 trained model (训练模型)的变换方法实现的 KMeans 。

示例:

  • Demonstration of k-means assumptions: 演示 k-means 是否 performs intuitively (直观执行),何时不执行
  • A demo of K-Means clustering on the handwritten digits data: 聚类手写数字

参考:

  • “k-means++: The advantages of careful seeding” Arthur, David, and Sergei Vassilvitskii, Proceedings of the eighteenth annual ACM-SIAM symposium on Discrete algorithms, Society for Industrial and Applied Mathematics (2007)

2.3.2.1. 小批量 K-Means

2.3.3. Affinity Propagation

2.3.4. Mean Shift

2.3.5. Spectral clustering

2.3.6. 层次聚类

2.3.6.2. 添加连接约束

2.3.7. DBSCAN

2.3.8. Birch

2.3.9. 聚类性能度量

2.3.9.1. 调整后的 Rand 指数

2.3.9.2. 基于 Mutual Information (互信息)的分数

2.3.9.2.3. 数学公式

2.3.9.3. 同质性,完整性和 V-measure

2.3.9.4. Fowlkes-Mallows 分数

2.3.9.5. Silhouette 系数

2.3.9.6. Calinski-Harabaz 指数

官方文档: http://scikit-learn.org/stable/

GitHub: https://github.com/apachecn/scikit-learn-doc-zh(觉得不错麻烦给个 Star,我们一直在努力)

贡献者: https://github.com/apachecn/scikit-learn-doc-zh#贡献者

关于我们: http://www.apachecn.org/organization/209.html

有兴趣的们也可以和我们一起来维护,持续更新中 。。。

机器学习交流群: 629470233

这篇关于【Scikit-Learn 中文文档】21 聚类 - 无监督学习 - 用户指南 | ApacheCN的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/550059

相关文章

springboot集成Lucene的详细指南

《springboot集成Lucene的详细指南》这篇文章主要为大家详细介绍了springboot集成Lucene的详细指南,文中的示例代码讲解详细,具有一定的借鉴价值,感兴趣的小伙伴可以跟随小编一起... 目录添加依赖创建配置类创建实体类创建索引服务类创建搜索服务类创建控制器类使用示例以下是 Spring

Android开发环境配置避坑指南

《Android开发环境配置避坑指南》本文主要介绍了Android开发环境配置过程中遇到的问题及解决方案,包括VPN注意事项、工具版本统一、Gerrit邮箱配置、Git拉取和提交代码、MergevsR... 目录网络环境:VPN 注意事项工具版本统一:android Studio & JDKGerrit的邮

CentOS和Ubuntu系统使用shell脚本创建用户和设置密码

《CentOS和Ubuntu系统使用shell脚本创建用户和设置密码》在Linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设置密码,本文写了一个shell... 在linux系统中,你可以使用useradd命令来创建新用户,使用echo和chpasswd命令来设

SpringBoot整合OpenFeign的完整指南

《SpringBoot整合OpenFeign的完整指南》OpenFeign是由Netflix开发的一个声明式Web服务客户端,它使得编写HTTP客户端变得更加简单,本文为大家介绍了SpringBoot... 目录什么是OpenFeign环境准备创建 Spring Boot 项目添加依赖启用 OpenFeig

SpringBoot UserAgentUtils获取用户浏览器的用法

《SpringBootUserAgentUtils获取用户浏览器的用法》UserAgentUtils是于处理用户代理(User-Agent)字符串的工具类,一般用于解析和处理浏览器、操作系统以及设备... 目录介绍效果图依赖封装客户端工具封装IP工具实体类获取设备信息入库介绍UserAgentUtils

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

SpringBoot请求参数接收控制指南分享

《SpringBoot请求参数接收控制指南分享》:本文主要介绍SpringBoot请求参数接收控制指南,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring Boot 请求参数接收控制指南1. 概述2. 有注解时参数接收方式对比3. 无注解时接收参数默认位置

使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)

《使用Python从PPT文档中提取图片和图片信息(如坐标、宽度和高度等)》PPT是一种高效的信息展示工具,广泛应用于教育、商务和设计等多个领域,PPT文档中常常包含丰富的图片内容,这些图片不仅提升了... 目录一、引言二、环境与工具三、python 提取PPT背景图片3.1 提取幻灯片背景图片3.2 提取

Android实现在线预览office文档的示例详解

《Android实现在线预览office文档的示例详解》在移动端展示在线Office文档(如Word、Excel、PPT)是一项常见需求,这篇文章为大家重点介绍了两种方案的实现方法,希望对大家有一定的... 目录一、项目概述二、相关技术知识三、实现思路3.1 方案一:WebView + Office Onl

Mysql用户授权(GRANT)语法及示例解读

《Mysql用户授权(GRANT)语法及示例解读》:本文主要介绍Mysql用户授权(GRANT)语法及示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录mysql用户授权(GRANT)语法授予用户权限语法GRANT语句中的<权限类型>的使用WITH GRANT