人工智能算法工程师(中级)课程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…...
EasyOCR: 简单易用的多语言OCR工具
EasyOCR: 简单易用的多语言OCR工具 1. 什么是EasyOCR?2. 使用场景3. 基本使用方法安装示例代码代码解释 4. 结语 1. 什么是EasyOCR? EasyOCR是一个基于Python的开源光学字符识别(OCR)工具,它支持80多种语言的文本识别。该项目由JaidedAI开发,旨在提供一个简单易用但功能强大…...
arm架构安装chrome
在ARM架构设备上安装谷歌软件或应用通常涉及到几个步骤,这取决于你要安装的具体谷歌产品,比如谷歌浏览器、Google Play服务或者是其他谷歌开发的软件。下面我会给出一些常见的指导步骤,以安装谷歌浏览器为例: 在Linux ARM64上安装…...
ETAS工具导入Com Arxml修改步骤
文章目录 前言Confgen之前的更改Confgen之后的修改CANCanIfComComMEcuM修改CanNmCanSMDCMCanTp生成RTE过程报错修改DEXT-诊断文件修改Extract问题总结前言 通讯协议栈开发一般通过导入DBC实现,ETAS工具本身导入DBC也是生成arxml后执行cfggen,本文介绍直接导入客户提供的arxml…...
Apache Kylin模型构建全解析:深入理解大数据的多维分析
引言 Apache Kylin是一个开源的分布式分析引擎,旨在为大数据提供快速的多维分析能力。它通过预计算技术,将数据转化为立方体模型(Cube),从而实现对Hadoop大数据集的秒级查询响应。本文将详细介绍Kylin中模型构建的全过…...
element-plus的文件上传组件el-upload
el-upload组件 支持多种风格,如文件列表,图片,图片卡片,支持多种事件,预览,删除,上传成功,上传中等钩子。 file-list:上传的文件集合,一定要用v-model:file-…...
等保测评视角下的哈尔滨智慧城市安全框架构建
随着智慧城市的兴起,哈尔滨作为东北地区的重要城市,正在积极探索和实践智慧城市安全框架的构建,以确保在数字化转型的过程中,既能享受科技带来的便利,又能有效防范和应对各类网络安全风险。 本文将从等保测评的视角出…...
Java中的数据缓存技术及其应用
Java中的数据缓存技术及其应用 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! 在现代应用程序中,数据缓存是一种重要的技术手段,用于提…...
SQL 索引
一、索引的基本概念 **索引(Index)**是数据库中一种特殊的数据结构,用于帮助数据库管理系统(DBMS)快速访问数据表中的特定信息。索引类似于书籍的目录,可以加快数据检索的速度。 二、索引的作用 提高查询…...
free第一次成功,第二次失败
问题描述: 在一个函数中存在free,第一次进入此函数没有问题,但是第二次出错 strncpy(pdd_all_data[i].sensor_name,white_list[j].dev_name,strlen(pdd_all_data[i].sensor_name)); 上面代码都是使用strncpy不小心导致double free or corrup…...
各种音频处理器
在HiFi(高保真)音频系统中,通常需要使用一些特定类型的音频处理器,以确保音频信号的高保真和优质输出。以下是一些常见的音频处理器类型及其在HiFi系统中的应用: DAC(数模转换器): …...
h5制作方法/seo网站优化方案摘要
文章目录第一题、01-Number-sequence第二题.02-Number Sequence - Part 2第三题:NUMBER SEQUENCE – PART 3第四题:NUMBER SEQUENCE – PART 4第五题:第六题:17-templer-03-en1.lab2的内容为上次课堂练习的内容,把做过…...
厦门网站建设求职简历/温州seo结算
背景 近几年,前端应用(WebApp)正朝着大规模方向发展,在这个过程中我们会对项目拆解成多个模块/组件来组合使用,以此提高我们代码的复用性,最终提高研发效率。 在编写一个复杂组件的时候,总会依…...
科技公司起名字大全免费/文军seo
入门 简单使用 <script src"../js/vue.js"></script><div id"app">{{message}}{{movies}} </div><script> const app new Vue({el:#app, //用于管理要管理的元素data:{ //定义数据 或者服务器请求数据message:你好啊,mo…...
网站做竞价优化/网络推广公司有多少家
在我们制作界面的时候经常会看到网上有很多的绚丽的界面他们的图形都非常炫酷。如何才能快速的制作出这样效果呢?那么今天MICU教大家如何使用2部方法制作炫酷的APP界面。喜欢的缘友们一起来学习吧。先看看效果图第1步绘制图形新建图层选择画板(ps cc 2015才有的功能…...
烟台网站建设 共赢/百度网址
【新近补充留言】 我认为:生成存储过程的访问代码最核心的是如何获取存储过程的信息及参数,如何将这些参数存储起来供模板编写时候使用, 如何根据实际项目不同编写一个模板。 每一种语言都有对应的获取方式,所以思路更重要。 …...
wordpress 图片热点/品牌传播方案
在oracle 12.1版本之前,oracle日志写进程LGWR为单进程,oracle 12.1开始实现了SCALABLE LGWR多进程,采用多个LGWR协同对redo log日志进行并行写入,这是Oracle数据库内部最重要的改进,解决了最后的并发瓶颈点 SCALABLE LGWR主要受到隐藏参数_use_single_l…...