聚类算法指南

news2024/12/23 22:48:25

欢迎来到雲闪世界。

聚类是任何数据科学家必备的技能,因为它对解决实际问题具有实用性和灵活性。本文概述了聚类和不同类型的聚类算法。

什么是聚类?

聚类是一种流行的无监督学习技术,旨在根据相似性将对象或观察结果分组。聚类有很多有用的应用,例如市场细分、推荐系统、探索性分析等。

作者图片

虽然聚类是数据科学领域中一种众所周知且广泛使用的技术,但有些人可能不知道不同类型的聚类算法。虽然只有少数几种,但了解这些算法及其工作原理对于获得最适合您用例的结果非常重要。

基于质心的聚类

提到聚类,大多数人首先想到的是基于质心的聚类。这是使用一定数量的质心(中心)对数据点进行聚类的“传统”方法,根据数据点与每个质心的距离对数据点进行分组。质心最终成为其分配的数据点的平均值。虽然基于质心的聚类功能强大,但它对异常值不够稳健,因为异常值需要分配给一个聚类。

K-均值

K-Means 是最广泛使用的聚类算法,很可能是您作为数据科学家学习的第一个算法。如上所述,目标是最小化数据点与聚类质心之间的距离总和,以确定每个数据点应属于的正确组。它的工作原理如下:

  1. 将定义数量的质心随机放入未标记数据的向量空间中(初始化)。
  2. 每个数据点测量自身与每个质心之间的距离(通常使用欧几里得距离),并将自身分配到最接近的质心。
  3. 质心重新定位到其指定数据点的平均值。
  4. 重复步骤 2-3,直到产生“最佳”聚类。

从sklearn.cluster导入KMeans
导入numpy作为np 

#样本数据
X = np.array([[ 1 , 2 ], [ 1 , 4 ], [ 1 , 0 ], 
              [ 10 , 2 ], [ 10 , 4 ], [ 10 , 0 ]]) 

#创建 k 均值模型
kmeans = KMeans(n_clusters = 2 , random_state = 0 , n_init = "auto" ).fit(X) 

#打印结果,用于预测,并打印中心
kmeans.labels_ 
kmeans.predict([[ 0 , 0 ], [ 12 , 3 ]]) 
kmeans.cluster_centers_

K-均值++

K-Means++ 是对 K-Means 初始化步骤的改进。由于质心是随机放入的,因此有可能将多个质心初始化到同一个聚类中,从而导致结果不佳。

然而,K-Means ++ 通过随机分配最终会找到最大簇的第一个质心来解决这个问题。然后,其他质心被放置在距离初始簇一定距离的地方。K-Means ++ 的目标是将质心推得尽可能远。这样可以得到独特且定义明确的高质量簇。

from sklearn.cluster import KMeans
import numpy as np

#sample data
X = np.array([[1, 2], [1, 4], [1, 0],
              [10, 2], [10, 4], [10, 0]])

#create k-means model
kmeans = KMeans(n_clusters = 2, random_state = 0, n_init = "k-means++").fit(X)

#print the results, use to predict, and print centers
kmeans.labels_
kmeans.predict([[0, 0], [12, 3]])
kmeans.cluster_centers_

基于密度的聚类

基于密度的算法也是一种流行的聚类形式。但是,它们不是从随机放置的质心进行测量,而是通过识别数据中的高密度区域来创建聚类。基于密度的算法不需要定义聚类数量,因此优化工作量较少。

虽然基于质心的算法在球形聚类中表现更好,但基于密度的算法可以采用任意形状,并且更灵活。它们也不包括聚类中的离群值,因此更稳健。然而,它们在处理不同密度和高维度的数据时会遇到困难。

作者图片

数据库扫描

DBSCAN 是最流行的基于密度的算法。DBSCAN 的工作原理如下:

  1. DBSCAN 随机选择一个数据点并检查它是否在指定半径内有足够的邻居。
  2. 如果该点有足够多的邻居,它就会被标记为聚类的一部分。
  3. DBSCAN 递归检查邻居在半径内是否也有足够的邻居,直到集群中的所有点都被访问过。
  4. 重复步骤 1-3,直到剩余数据点在半径内没有足够的邻居。
  5. 剩余的数据点被标记为异常值。
from sklearn.cluster import DBSCAN
import numpy as np

#sample data
X = np.array([[1, 2], [2, 2], [2, 3],
              [8, 7], [8, 8], [25, 80]])

#create model
clustering = DBSCAN(eps=3, min_samples=2).fit(X)

#print results
clustering.labels_

层次聚类

接下来,我们进行层次聚类。此方法首先从原始数据计算距离矩阵。此距离矩阵是最好的,通常通过树状图可视化(见下文)。通过找到最近的邻居,数据点逐个链接在一起,最终形成一个巨大的集群。因此,通过阻止所有数据点链接在一起来识别集群的截止点。

作者图片

通过使用此方法,数据科学家可以通过定义异常值并将其排除在其他聚类中来构建稳健的模型。此方法非常适合分层数据,例如分类法。聚类的数量取决于深度参数,可以是 1-n 之间的任意值。

from scipy.cluster.hierarchy import dendrogram, linkage
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import fcluster

#create distance matrix
linkage_data = linkage(data, method = 'ward', metric = 'euclidean', optimal_ordering = True)

#view dendrogram
dendrogram(linkage_data)
plt.title('Hierarchical Clustering Dendrogram') 
plt.xlabel('Data point') 
plt.ylabel('Distance') 
plt.show()

#assign depth and clusters
clusters = fcluster(linkage_data, 2.5, criterion = 'inconsistent', depth = 5)

基于分布的聚类

最后,基于分布的聚类考虑了距离和密度以外的指标,即概率。基于分布的聚类假设数据由概率分布(例如正态分布)组成。该算法创建了表示置信区间的“带”。数据点距离聚类中心越远,我们对数据点属于该聚类的信心就越低。

作者图片

基于分布的聚类由于其假设而很难实现。通常不建议使用这种方法,除非已经进行过严格的分析来确认其结果。例如,使用它来识别营销数据集中的客户细分,并确认这些细分遵循某种分布。这也是一种很好的探索性分析方法,不仅可以查看聚类中心的组成,还可以查看边缘和异常值。

结论

聚类是一种无监督机器学习技术,在许多领域都有越来越广泛的应用。它可用于支持数据分析、细分项目、推荐系统等。上面我们探讨了它们的工作原理、优缺点、代码示例,甚至一些用例。我认为,由于聚类算法的实用性和灵活性,数据科学家必须具备该算法的经验。

感谢关注雲闪世界。(Aws解决方案架构师vs开发人员&GCP解决方案架构师vs开发人员)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2112321.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

c++的封装

实现my_string中可能实现的功能 #include <iostream> #include<cstring> using namespace std; class my_string {char *str; //记录c风格的字符串int size; //记录字符串的实际长度int capacit;//记录最大容量public://无参的构造函数my_string():size(0)…

护眼台灯十大排名有哪些?盘点2024年央视公认最好的护眼灯!

随着学业负担的加重和电子设备的广泛使用&#xff0c;青少年的近视问题变得日益严峻&#xff0c;近视率也在持续上升。导致近视的因素多样&#xff0c;不仅仅局限于电子屏幕的过度使用&#xff0c;还包括遗传因素、不良的用眼习惯、环境条件、营养不良以及过重的学习压力等&…

公司电脑能监控聊天记录吗?公司监控微信聊天记录的方法,一分钟速成!

在现代企业中&#xff0c;微信已经成为许多员工日常沟通的主要工具。虽然它极大地提高了工作效率&#xff0c;但也给公司管理带来了一些挑战&#xff0c;比如如何防止员工在工作时间闲聊、保护企业机密信息不外泄等。因此&#xff0c;不少公司希望对员工的微信聊天记录进行监控…

SealSuite 一站式 IT 管理与办公安全解决方案,助力出海企业夯实数字化底座

数字化办公时代&#xff0c;企业升级 IT 基础设施&#xff0c;已不再是选择题&#xff0c;而是必答题。 数字化办公时代&#xff0c;企业为何要升级 IT 基础设施&#xff1f; 随着时代变化与科技进步&#xff0c;人们的工作方式也发生了巨大变化。如今&#xff0c;远程办公、全…

FPGA编译与部署方法全方位介绍

FPGA编译与部署是FPGA开发中的核心环节&#xff0c;涉及从代码编写、调试到将设计部署到FPGA硬件的全过程。这个流程需要经过创建项目、编写FPGA VI、模拟调试、编译生成比特流文件&#xff0c;最后将设计部署到硬件上运行。编译的特点在于并行执行能力、定制化硬件实现以及复杂…

【Java数据结构】反射、枚举以及lambda表达式

&#x1f512;文章目录&#xff1a; 1.❤️❤️前言~&#x1f973;&#x1f389;&#x1f389;&#x1f389; 2.反射 2.1反射定义 2.2反射主要应用场景 2.3Class类(反射机制的起源) 2.31获取Class类 2.32Class类常用方法 2.33获得类中的成员变量 2.34使用类中的成员…

Leetcode3258. 统计满足 K 约束的子字符串数量 I

Every day a Leetcode 题目来源&#xff1a;3258. 统计满足 K 约束的子字符串数量 I 解法1&#xff1a;暴力 暴力枚举每一个子字符串&#xff0c;看是否满足 k 约束。 代码&#xff1a; /** lc appleetcode.cn id3258 langcpp** [3258] 统计满足 K 约束的子字符串数量 I*/…

WebAPI(三)、 DOM 日期对象Date;获取事件戳;根据节点关系查找节点

文章目录 DOM1. 日期对象(1)、日期对象方法(2)、时间戳(3)、下课倒计时 2. 节点操作(1)、 查找节点&#xff08;根据节点关系找&#xff09;(2)、 增加节点&#xff1a;创建create、追加append、克隆clone(3)、 删除节点remove DOM 1. 日期对象 日期对象就是用来表示时间的对…

PMP–一、二、三模–分类–14.敏捷–技巧–原型MVP

文章目录 技巧一模14.敏捷--原型法--项目生命周期--迭代型生命周期&#xff0c;通过连续的原型或概念验证来改进产品或成果。每个新的原型都能带来新的干系人新的反馈和团队见解。题目中明确提到需要反馈&#xff0c;因此原型法比较好用。23、 [单选] 一个敏捷团队的任务是开发…

【Hot100算法刷题集】哈希-02-字母异位词分组(含排序构造键、自定义键、自定义哈希函数法)

&#x1f3e0;关于专栏&#xff1a;专栏用于记录LeetCode中Hot100专题的所有题目 &#x1f3af;每日努力一点点&#xff0c;技术变化看得见 题目转载 题目描述 &#x1f512;link->题目跳转链接 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺…

【解压即玩】PC版《最终幻想9》重制版 高清宽屏,怀旧经典

《最终幻想IX》&#xff08;日语&#xff1a;ファイナルファンタジーIX&#xff0c;英语&#xff1a;Final Fantasy IX&#xff0c;台港澳旧译为“太空战士IX”&#xff09;是由史克威尔&#xff08;现为史克威尔艾尼克斯&#xff09;为索尼PlayStation游戏机开发并发行的一款角…

元学习与机器学习

如图1 所示&#xff0c;机器学习的目标是要找一个函数f&#xff0c;这个函数可以是一个分类器&#xff0c;把几百张图 片输入进去&#xff0c;分类器就告诉我们分类的结果。元学习一样是找一个函数&#xff0c;但它要找的是一个学 习算法Fϕ∗&#xff0c;这个学习算法可以接受…

Java并发编程实战 06 | 为什么不建议使用线程优先级?

什么是线程优先级&#xff1f; 线程优先级是一个标识&#xff0c;用来提示操作系统或线程调度器哪个线程更重要、更需要优先执行。优先级通常是一个整数值。 在 Java 中&#xff0c;线程优先级的设置范围从 1 到 10&#xff0c;其中 1 是最低优先级&#xff0c;10 是最高优先…

2024 年高教社杯全国大学生数学建模竞赛C题—农作物的种植策略(讲解+代码+成品论文助攻)

2024数学建模国赛选题建议团队助攻资料-CSDN博客文章浏览阅读1k次&#xff0c;点赞20次&#xff0c;收藏24次。通过分析5个题目的特点&#xff0c;可知数学建模常用的模型大概可以分为五大类——https://blog.csdn.net/qq_41489047/article/details/141925859 本次国赛white学长…

WebAPI(四) BOM;延时函数;JS执行机制(同步异步);location对象;history对象;navigation对象

文章目录 BOM1. 定时器-延时函数2. JS执行机制(1)、同步与异步(2)、事件循环 3. location对象(1)、href属性获取完整的url地址(2)search属性获取地址中携带的参数(3) hash&#xff1a;获取地址中的#后边的部分(3) reload&#xff1a; 刷新当前页面&#xff0c;传入参数true表示…

025集—— 转义字符\、字符串详解(对比、分割、日期、数字等)——C#学习笔记

本文讲解字符串的比较&#xff1a;忽略大小写与不忽略大小写&#xff0c;内存地址是否相同。 当需要对两个字符串的值进行比较和排序而不需要考虑语言惯例时&#xff0c;请使用基本的序号比较。基本的序号比较 (Ordinal) 是区分大小写的&#xff0c;这意味着两个字符串的字符必…

纳米材料咋设计?蛋白质模块咋用?看这里就知道啦!

大家好&#xff0c;今天我们来了解一项关于蛋白质纳米材料设计的研究——《Blueprinting extendable nanomaterials with standardized protein blocks》发表于《Nature》。蛋白质结构复杂&#xff0c;其组装体的设计颇具挑战。但近期的研究取得了新突破&#xff0c;通过设计标…

高精度治具加工的重要性和创新性

在现代制造业中&#xff0c;高精度治具加工扮演着至关重要的角色。它不仅是生产过程中的关键环节&#xff0c;更是推动行业不断创新和发展的重要力量。时利和将解析高精度治具加工的重要性和创新性。 一、高精度治具加工的重要性 1.确保产品质量 高精度治具能够为生产过程提供准…

API安全 | 发现API的5个小tips

在安全测试目标时&#xff0c;最有趣的测试部分是它的 API。API 是动态的&#xff0c;它们比应用程序的其他部分更新得更频繁&#xff0c;并且负责许多后端繁重的工作。在现代应用程序中&#xff0c;我们通常会看到 REST API&#xff0c;但也会看到其他形式&#xff0c;例如 Gr…

基于yolov8的包装盒纸板破损缺陷测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的包装盒纸板破损缺陷检测系统是一种高效、智能的解决方案&#xff0c;旨在提高生产线上包装盒纸板的质量检测效率与准确性。该系统利用YOLOv8这一前沿的深度学习模型&#xff0c;通过其强大的目标检测能力&#xff0c;能够实时识别并标记出包装盒纸板…