人工智能算法工程师(中级)课程6-sklearn机器学习之聚类问题与代码详解
大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程6-sklearn机器学习之聚类问题与代码详解。在机器学习领域,聚类是一种无监督学习方法,旨在将相似的数据点划分为同一类别。sklearn是一个广泛应用于机器学习的Python库,提供了多种聚类算法。本文将详细介绍K-Means、DBSCAN和层次聚类这三种算法的数学原理、公式及实现代码。
文章目录
- sklearn机器学习之聚类问题与代码详解
- 1.K-Means算法
- K-Means的数学原理
- K-Means的公式
- K-Means算法代码实现
- 2.DBSCAN算法
- DBSCAN算法数学原理
- DBSCAN算法公式
- DBSCAN算法代码实现
- 3.层次聚类
- 层次聚类数学原理
- 层次聚类公式
- 层次聚类代码实现
- 总结
sklearn机器学习之聚类问题与代码详解
1.K-Means算法
K-Means的数学原理
K-Means算法是一种基于距离的聚类方法。其目标是将数据集划分为K个簇,使得每个数据点与其所属簇的中心点距离最小。
K-Means算法过程如下:
-初始化:随机选择K个数据点作为初始聚类中心。
-分配步骤:对于数据集中的每一个数据点,计算它与每个聚类中心的距离,并将其分配到最近的聚类中心所代表的簇中。
-更新步骤:重新计算每个簇的中心点。新的聚类中心是该簇所有数据点的均值,即取簇内所有点的坐标的平均值。
-迭代:重复步骤2和步骤3,直到满足停止条件。停止条件可以是聚类中心的变化小于某个阈值、达到预设的迭代次数或者数据点的簇分配不再改变。
-结束:当聚类中心的变化小于预设的阈值或达到最大迭代次数时,算法停止迭代,此时的聚类中心即为最终结果。
K-Means的公式
设数据集为X,聚类中心为C,则K-Means算法的目标函数为:
J = ∑ i = 1 K ∑ x ∈ S i ∣ ∣ x − c i ∣ ∣ 2 J = \sum_{i=1}^{K} \sum_{x \in S_i} ||x - c_i||^2 J=i=1∑Kx∈Si∑∣∣x−ci∣∣2
其中, S i S_i Si表示第i个簇, c i c_i ci表示第i个簇的中心点。
K-Means算法代码实现
from sklearn.cluster import KMeans
import numpy as np
# 生成数据
X = np.random.rand(100, 2)
# 初始化KMeans
kmeans = KMeans(n_clusters=3)
# 拟合数据
kmeans.fit(X)
# 预测结果
labels = kmeans.predict(X)
# 输出聚类中心
print("聚类中心:", kmeans.cluster_centers_)
2.DBSCAN算法
DBSCAN算法数学原理
DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法。它将具有足够高密度的区域划分为簇,并可以发现任意形状的簇。
DBSCAN算法公式
DBSCAN算法涉及以下两个参数:
- ε(邻域半径):判断一个点是否为核心点的邻域半径
- MinPts(最小样本数):判断一个核心点是否为边界点的最小样本数
一个点p的密度可达点定义为:从p出发,通过密度相连的点可以到达的所有点。
DBSCAN算法的过程如下:
1.参数选择:首先,需要选择两个参数:
- ε(epsilon):邻域半径,表示一个点的邻域大小。
- MinPts:最小样本数,表示一个区域内至少需要多少个点才能被视为密度可达。
2.核心点识别:对于数据集中的每个点,计算以该点为中心、半径为ε的邻域内的点的数量。如果这个数量大于或等于MinPts,则该点被称为核心点。
3.密度直达:如果一个点p在另一个核心点q的ε邻域内,那么点p由点q密度直达。
4.密度可达:如果一个点p由核心点q密度直达,核心点q由核心点r密度直达,以此类推,形成一条链,那么点p由点r密度可达,即使点p不在点r的ε邻域内。
5.簇的形成:从数据集中任意选择一个未访问过的核心点开始,找出所有从这个点密度可达的核心点,这些点组成一个簇。重复这个过程,直到所有核心点都被访问过。
6.噪声点的识别:所有不是核心点且不与任何核心点密度可达的点被认为是噪声点。

DBSCAN算法代码实现
from sklearn.cluster import DBSCAN
import numpy as np
# 生成数据
X = np.random.rand(100, 2)
# 初始化DBSCAN
dbscan = DBSCAN(eps=0.3, min_samples=5)
# 拟合数据
dbscan.fit(X)
# 预测结果
labels = dbscan.labels_
# 输出聚类结果
print("聚类结果:", labels)
3.层次聚类
层次聚类数学原理
层次聚类(Hierarchical Clustering)是一种逐步合并或分裂的聚类方法。它分为自底向上(凝聚)和自顶向下(分裂)两种策略。
层次聚类公式
层次聚类的相似度计算方法有多种,如最小距离、最大距离和平均距离等。以下是最小距离的计算公式:
d m i n ( C i , C j ) = min x ∈ C i , y ∈ C j ∣ ∣ x − y ∣ ∣ d_{min}(C_i, C_j) = \min_{x \in C_i, y \in C_j} ||x - y|| dmin(Ci,Cj)=x∈Ci,y∈Cjmin∣∣x−y∣∣

层次聚类代码实现
from sklearn.cluster import AgglomerativeClustering
import numpy as np
# 生成数据
X = np.random.rand(100, 2)
# 初始化层次聚类
agg_clustering = AgglomerativeClustering(n_clusters=3, linkage='ward')
# 拟合数据
agg_clustering.fit(X)
# 预测结果
labels = agg_clustering.labels_
# 输出聚类结果
print("聚类结果:", labels)
总结
本篇文章详细介绍了sklearn中三种常见的聚类算法:K-Means、DBSCAN和层次聚类。通过数学原理、公式及代码实现,帮助读者更好地理解和应用这些算法。在实际应用中,根据数据特点选择合适的聚类算法至关重要。希望本文对您有所帮助!
相关文章:
人工智能算法工程师(中级)课程6-sklearn机器学习之聚类问题与代码详解
大家好,我是微学AI,今天给大家介绍一下人工智能算法工程师(中级)课程6-sklearn机器学习之聚类问题与代码详解。在机器学习领域,聚类是一种无监督学习方法,旨在将相似的数据点划分为同一类别。sklearn是一个广泛应用于机器学习的Py…...
Objective-C 中的 isa 不再是简单的结构体指针
了解 Objective-C 中的 isa 指针内存结构 在 Objective-C 中,isa 指针是对象和类之间的重要桥梁。它不仅帮助运行时系统识别对象的类型,还参与了一些内存和性能优化。本文将深入讲解 isa 指针的内存结构,包括其在早期和现代实现中的演变。 …...
中介子方程五十二
XXFXXaXnXaXXαXLXyXXWXuXeXKXXiXyXΣXXΣXXVXuXhXXWXηXXiXhXXpXiXXpXXbXXpXXiXpXXhXiXXηXWXXhXuXVXXΣXXΣXyXiXXKXeXuXWXXyXLXαXXaXnXaXXFXXaXnXaXXαXLXyXXWXuXeXKXXiXyXΣXXΣXXVXuXhXXWXηXXiXhXXpXiXXpXXbXXpXXiXpXXhXiXXηXWXXhXuXVXXΣXXΣXyXiXXKXeXuXWXXyXLXαXXa…...
LabVIEW在半导体自动化测试中的应用
半导体制造的复杂性和精密度要求极高,每一个生产步骤都需要严格的控制和监测。自动化测试设备在半导体制造中起到了关键作用,通过精密测量和数据分析,确保产品质量和生产效率。本文介绍如何使用LabVIEW结合研华硬件,开发一个用于半…...
政安晨:【Keras机器学习示例演绎】(五十三)—— 使用 TensorFlow 决策森林进行分类
目录 简介 设置 准备数据 定义数据集元数据 配置超参数 实施培训和评估程序 实验 1:使用原始特征的决策森林 检查模型 实验 2:目标编码决策森林 创建模型输入 使用目标编码实现特征编码 使用预处理器创建梯度提升树模型 训练和评估模型 实验…...
51单片机:电脑通过串口控制LED亮灭(附溢出率和波特率详解)
一、功能实现 1.电脑通过串口发送数据:0F 2.点亮4个LED 二、注意事项 1.发送和接受数据的文本模式 2.串口要对应 3.注意串口的波特率要和程序中的波特率保持一致 4.有无校验位和停止位 三、如何使用串口波特率计算器 1.以本程序为例 2.生成代码如下 void Uar…...
Java中的消息中间件选择与比较
Java中的消息中间件选择与比较 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在分布式系统中,消息中间件是一种关键组件,它能帮助不同…...
react基础语法,模板语法,ui渲染,jsx,useState状态管理
创建一个react应用 这里使用create-react-app的脚手架构建项目(结构简洁,基于webpack-cli), npx create-react-app [项目名称] 使用其他脚手架构建项目可以参考:react框架,使用vite和nextjs构建react项目…...
OJ-0710
示例1 input 4 100 200 300 5001 21 32 4output700100 200 500 300 示例2 input 4 100 200 300 500 1 2 1 3 1 4output1100100 200500300 示例3 input 6 100 200 300 400 300 550 1 2 1 3 1 4 2 5 2 6output1050100 200 300600 300400 import java.util.ArrayList; im…...
人工智能在自动驾驶中的目标检测研究
摘要 随着自动驾驶技术的快速发展,视觉识别作为核心技术之一,扮演着至关重要的角色。本文旨在探讨人工智能如何通过视觉识别在自动驾驶中进行目标检测。我们将详细讨论目标检测的基本原理、常用算法、最新进展、已有的开源项目及其在自动驾驶中的应用和…...
【合并两个有序数组】
合并两个有序数组 一、题目二、普通解法三、双指针 一、题目 二、普通解法 先合并后排序 补充:js合并数组方法详见https://blog.csdn.net/ACCPluzhiqi/article/details/131702269?fromshareblogdetail js排序方法见http://t.csdnimg.cn/wVCOP 时间复杂度:O(mn)…...
链表 OJ(一)
移除链表元素 题目连接: https://leetcode.cn/problems/remove-linked-list-elements/description/ 使用双指针法,开始时,一个指针指向头节点,另一个指针指向头节点的下一个结点,然后开始遍历链表删除结点。 这里要注…...
《Linux与Windows文件系统的区别》
Linux与Windows文件系统的区别 在计算机操作系统领域,Linux和Windows是两种广泛使用的操作系统,它们在文件系统方面有许多显著的差异。这篇博客将详细介绍这两种操作系统文件系统的区别,帮助读者更好地理解它们各自的特点和优势。 类别Linu…...
批量修改Git历史commit信息中的username
之前很长一段时间GitHub上的提交都在使用工作账户, 导致私人仓库中的提交者比较混乱. 在StackOver里面找到了一个bash脚本可以批量修改username, 在这里记录一下. 修改的步骤一共两步: 执行修改脚本将本地修改同步到Git服务器 首先我们来看脚本: #!/bin/shgit filter-branch…...
LabVIEW与ABB工业机器人据监控
1. 前言 随着工业自动化的发展,工业机器人在制造业中的应用越来越广泛。为了实现对工业机器人的高效监控和控制,本文介绍了利用OPC(OLE for Process Control)服务器将ABB工业机器人与LabVIEW连接起来的解决方案。通过OPC服务器…...
c++栈内存和堆内存的基本使用
c栈内存和堆内存的基本使用 #include <iostream>// 定义一个简单的结构体 struct Person {std::string name;int age; };int main() {// 栈内存分配int a 10; // 基本数据类型的栈内存分配Person person; // 结构体的栈内存分配person.name "John";person.a…...
快速入门,springboot知识点汇总
学习 springboot 应该像学习一门编程语言一样,首先要熟练掌握常用的知识,而对于不常用的内容可以简单了解一下。先对整个框架和语言有一个大致的轮廓,然后再逐步补充细节。 前序: Spring Boot 通过简化配置和提供开箱即用的特性,…...
Ubuntu20.04系统非root用户安装GAMIT10.71
(测试环境:20240701升级包和20240701数据,解算通过) QQ:8212714 群:302883438群文件(source安装包20240701升级包) 1、首先在计算机中安装VMware Workstation 16 Pro。建议:分配…...
stm32 开发板可以拿来做什么?
STM32开发板可以用来做许多不同的事情,具体取决于您的应用需求和编程能力。我收集归类了一份嵌入式学习包,对于新手而言简直不要太棒,里面包括了新手各个时期的学习方向编程教学、问题视频讲解、毕设800套和语言类教学,敲个22就可…...
latex英文转中文word,及一些latex相关工具分享
前言:想要转换latex生成的英文pdf文件为中文word文件 一、主要步骤 1、文字翻译:直接使用谷歌翻译等辅助将英文翻译成中文即可; 支持英文pdf文件全文翻译,再用迅捷PDF转换器之类的转成word,再手动调整。 https://app…...
中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
深入解析 ReentrantLock:原理、公平锁与非公平锁的较量
ReentrantLock 是 Java 中 java.util.concurrent.locks 包下的一个重要类,用于实现线程同步,支持可重入性,并且可以选择公平锁或非公平锁的实现方式。下面将详细介绍 ReentrantLock 的实现原理以及公平锁和非公平锁的区别。 ReentrantLock 实现原理 基本架构 ReentrantLo…...
Java设计模式:责任链模式
一、什么是责任链模式? 责任链模式(Chain of Responsibility Pattern) 是一种 行为型设计模式,它通过将请求沿着一条处理链传递,直到某个对象处理它为止。这种模式的核心思想是 解耦请求的发送者和接收者,…...
ABB馈线保护 REJ601 BD446NN1XG
配电网基本量程数字继电器 REJ601是一种专用馈线保护继电器,用于保护一次和二次配电网络中的公用事业和工业电力系统。该继电器在一个单元中提供了保护和监控功能的优化组合,具有同类产品中最佳的性能和可用性。 REJ601是一种专用馈线保护继电器…...
uni-app学习笔记二十三--交互反馈showToast用法
showToast部分文档位于uniapp官网-->API-->界面:uni.showToast(OBJECT) | uni-app官网 uni.showToast(OBJECT) 用于显示消息提示框 OBJECT参数说明 参数类型必填说明平台差异说明titleString是提示的内容,长度与 icon 取值有关。iconString否图…...
【Redis】Redis 的持久化策略
目录 一、RDB 定期备份 1.2 触发方式 1.2.1 手动触发 1.2.2.1 自动触发 RDB 持久化机制的场景 1.2.2.2 检查是否触发 1.2.2.3 线上运维配置 1.3 检索工具 1.4 RDB 备份实现原理 1.5 禁用 RDB 快照 1.6 RDB 优缺点分析 二、AOF 实时备份 2.1 配置文件解析 2.2 开启…...
DOM(文档对象模型)深度解析
DOM(文档对象模型)深度解析 DOM 是 HTML/XML 文档的树形结构表示,提供了一套让 JavaScript 动态操作网页内容、结构和样式的接口。 一、DOM 核心概念 1. 节点(Node)类型 类型值说明示例ELEMENT_NODE1元素节点<div>, <p>TEXT_NODE3文本节点元素内的文字COMMEN…...
