【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

相关文章

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

使用Python快速实现链接转word文档

《使用Python快速实现链接转word文档》这篇文章主要为大家详细介绍了如何使用Python快速实现链接转word文档功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 演示代码展示from newspaper import Articlefrom docx import

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

Java下载文件中文文件名乱码的解决方案(文件名包含很多%)

《Java下载文件中文文件名乱码的解决方案(文件名包含很多%)》Java下载文件时,文件名中文乱码问题通常是由于编码不正确导致的,使用`URLEncoder.encode(filepath,UTF-8... 目录Java下载文件中文文件名乱码问题一般情况下,大家都是这样为了解决这个问题最终解决总结Java下

SQL Server数据库迁移到MySQL的完整指南

《SQLServer数据库迁移到MySQL的完整指南》在企业应用开发中,数据库迁移是一个常见的需求,随着业务的发展,企业可能会从SQLServer转向MySQL,原因可能是成本、性能、跨平台兼容性等... 目录一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据二、迁移工具的选择2.1

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp