当前位置: 首页 > news >正文

AI人工智能机器学习之聚类分析

1、概要

  本篇学习AI人工智能机器学习之聚类分析,以KMeans、AgglomerativeClustering、DBSCAN为例,从代码层面讲述机器学习中的聚类分析。

2、聚类分析 - 简介

聚类分析是一种无监督学习的方法,用于将数据集中的样本划分为不同的组(簇),使得同一组中的样本相似度较高,而不同组之间的样本相似度较低。

sklearn.cluster提供了多种聚类算法

  • K均值聚类(K-Means Clustering),最常用的聚类算法之一,通过迭代找到 K 个簇的中心,并将样本分配给离其最近的中心,从而形成 K 个簇。
  • 层次聚类(Agglomerative Clustering),通过构建一个树形结构(树状图)来表示数据的聚类过程,生成不同层次的聚类结果。
  • DBSCAN(基于密度的聚类),通过测量数据点的密度来识别簇,能够发现任意形状的簇,并且可以有效处理噪声。

本篇,以三个示例讲述聚类分析使用方法:

  • 示例1:对数据集进行K均值聚类分析
  • 示例2:对数据集进行层次聚类分析
  • 示例3:对数据集进行基于密度的聚类分析

本篇相关资料代码参见:AI人工智能机器学习相关知识资源及使用的示例代码

3、聚类分析

3.1、安装依赖

python安装机器学习库: pip install scikit-learn

3.2、示例1: 对数据集进行K均值聚类分析
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score# 生成样本数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 创建 KMeans 模型
kmeans = KMeans(n_clusters=4, init='k-means++', max_iter=300, n_init='auto') 
kmeans.fit(X)# 获取聚类结果
y_kmeans = kmeans.predict(X)# 评估聚类效果 - 轮廓系数(Silhouette Score):衡量样本与其聚类的相似性。值范围在 [-1, 1] 之间,值越大表示聚类效果越好。
score = silhouette_score(X, y_kmeans)
print(f"Silhouette Score: {score:.3f}")# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_kmeans, s=50, cmap='viridis')
centers = kmeans.cluster_centers_
plt.scatter(centers[:, 0], centers[:, 1], c='red', s=200, alpha=0.75, marker='o')
plt.title("K-Means Clustering")
plt.show()

运行上述代码的输出:

Silhouette Score: 0.682   

在这里插入图片描述

参数释义:

  • n_clusters:指定要形成的簇的数量。
  • init:初始化簇中心的方法,常用的有 ‘k-means++’(默认)和 ‘random’。
  • max_iter:最大迭代次数。
  • n_init:运行算法的次数,选择最佳结果。
3.3、示例2:对数据集进行层次聚类分析
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import AgglomerativeClustering
from sklearn.metrics import silhouette_score# 生成样本数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 创建层次聚类模型
agg_clustering = AgglomerativeClustering(n_clusters=4, metric='euclidean', linkage='ward',)
y_agg = agg_clustering.fit_predict(X)# 评估聚类效果 - 轮廓系数(Silhouette Score):衡量样本与其聚类的相似性。值范围在 [-1, 1] 之间,值越大表示聚类效果越好。
score = silhouette_score(X, y_kmeans)
print(f"Silhouette Score: {score:.3f}")# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_agg, s=50, cmap='viridis')
plt.title("Agglomerative Clustering")
plt.show()

运行上述代码的输出:

Silhouette Score: 0.682

在这里插入图片描述

参数释义:

  • n_clusters:指定要形成的簇的数量。
  • metric:计算样本之间距离的方式,常用的有 ‘euclidean’(欧氏距离)和 ‘manhattan’(曼哈顿距离)。
  • linkage:聚类的连接方式,常用的有 ‘ward’(默认)、‘complete’、‘average’ 和 ‘single’。
3.4、示例3:对数据集进行基于密度的聚类分析
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import DBSCAN
from sklearn.metrics import silhouette_score# 生成样本数据
X, y = make_blobs(n_samples=300, centers=4, cluster_std=0.60, random_state=0)# 创建 DBSCAN 模型
dbscan = DBSCAN(eps=0.5, min_samples=5)
y_dbscan = dbscan.fit_predict(X)# 评估聚类效果 - 轮廓系数(Silhouette Score):衡量样本与其聚类的相似性。值范围在 [-1, 1] 之间,值越大表示聚类效果越好。
score = silhouette_score(X, y_kmeans)
print(f"Silhouette Score: {score:.3f}")# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=y_dbscan, s=50, cmap='viridis')
plt.title("DBSCAN Clustering")
plt.show()

运行上述代码的输出:

Silhouette Score: 0.682

在这里插入图片描述

参数释义:

  • eps:指定形成簇的最大距离(邻域的半径)。
  • min_samples:形成一个簇所需的最小样本数。

4、 总结

本篇以KMeans、AgglomerativeClustering、DBSCAN为例,从代码层面讲述机器学习中的聚类分析,同时使用轮廓系数评估了聚类效果。每种算法都有其独特的优缺点,适用于不同类型的数据集。在实际应用中,选择合适的聚类算法和优化参数是获得良好聚类效果的关键。通过可视化和评估指标,可以更好地理解聚类结果的质量。

相关文章:

AI人工智能机器学习之聚类分析

1、概要 本篇学习AI人工智能机器学习之聚类分析,以KMeans、AgglomerativeClustering、DBSCAN为例,从代码层面讲述机器学习中的聚类分析。 2、聚类分析 - 简介 聚类分析是一种无监督学习的方法,用于将数据集中的样本划分为不同的组&#xff…...

(下:补充——五个模型的理论基础)深度学习——图像分类篇章

目录 1.1 卷积神经网络基础 3.1 AlexNet网络结构详解与花分类数据集下载 4.1 VGG网络详解及感受野的计算 5.1 GoogLeNet网络详解 6.1 ResNet网络结构,BN以及迁移学习详解 总结(可以直接看总结) 1.1 卷积神经网络基础 视频讲解&#xf…...

使用Python自动生成图文并茂的网页分析报告

在数据分析中,不管是市场研究还是科学分析,经常需要使用Python进行数据分析并生成图表报告。一般使用Python生成和展示图表时都是使用matplotlib 库生成静态图片文件,这种方式不便之处是不方便跟动态文字段落结合在一起,也不方便分…...

uniapp-原生android插件开发摘要

uni-app在App侧的原生扩展插件,支持使用java、object-c等原生语言编写,从HBuilderX 3.6起,新增支持了使用uts来开发原生插件。 基础项目 UniPlugin-Hello-AS工程请在App离线SDK中查找 基础项目(App离线SDK)已经配置好了自定义插件所需要的…...

GIT工具学习【1】:基本操作

目录 0.本地代码分区1.配置自己的个人信息(设置一次即可)2.新建仓库3.提交代码到暂存区(加入购物车)4.从暂存区撤回(不会改变工作区文件)5.恢复指定版本(会改变工作区文件)5.1&#…...

《国密算法开发实战:从合规落地到性能优化》

前言 随着信息技术的飞速发展,信息安全已成为全球关注的焦点。在数字化时代,数据的保密性、完整性和可用性直接关系到国家、企业和个人的利益。为了保障信息安全,密码技术作为核心支撑,发挥着至关重要的作用。国密算法,即国家密码算法,是我国自主设计和推广的一系列密码…...

【语法】C++中string类中的两个问题及解答

贴主在学习string类时遇到过两个困扰我的问题,今天拿出来给大家分享一下我是如何解决的 一、扩容时capacity的增长问题 在string的capacity()接口中,调用的是这个string对象的容量(可以存多少个有效字符),而size()是调用的string对象现在有…...

LeetCode-154. 寻找旋转排序数组中的最小值 II

1、题目描述: 已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums [0,1,4,4,5,6,7] 在变化后可能得到: 若旋转 4 次,则可以得到 [4,5,6,7,0,…...

2.数据结构:1.Tire 字符串统计

1.Tire 字符串统计 #include<algorithm> #include<cstring> #include<iostream>using namespace std;const int N100010; int son[N][26];//至多 N 层&#xff0c;每一层至多 26 个节点&#xff08;字母&#xff09; int cnt[N];//字符串至多 N 个&#xff…...

C语言复习4:有关数组的基础常见算法

# 数组的常见算法 - 查找算法 1. 基本查找/顺序查找 2. 二分查找/折半查找 3. 插值查找 4. 分块查找 5. 哈希查找 6. 树表查找 7. 斐波那契查找 - 排序算法&#xff08;顾名思义&#xff0c;就是把没有顺序的…...

Ubuntu从零创建Hadoop集群

目录 前言 前提准备 1.设置网关和网段 2.查看虚拟机IP及检查网络 3.Ubuntu相关配置 镜像源配置 下载 vim编辑器 4.设置静态IP和SSH免密(可选) 设置静态IP SSH免密 5.JDK环境部署 6.Hadoop环境部署 7.配置 Hadoop 配置文件 HDFS集群规划 HDFS集群配置 1.配…...

GPIO概念

GPIO通用输入输出口 在芯片内部存在多个GPIO&#xff0c;每个GPIO用于管理多个芯片进行输入&#xff0c;输出工作 引脚电平 0v ~3.3v&#xff0c;部分引脚可容任5v 输出模式下可控制端口输出高低电平&#xff0c;可以驱动LED&#xff0c;控制蜂鸣器&#xff0c;模拟通信协议&a…...

Node.js, Bun, Deno 比较概述

以下是 Node.js、Bun 和 Deno 的对比分析 概览 对比维度Node.jsDenoBun首次发布200920202022创始人Ryan DahlRyan Dahl&#xff08;Node.js 原作者&#xff09;Jarred Sumner运行时引擎V8&#xff08;Chrome&#xff09;V8&#xff08;Chrome&#xff09;JavaScriptCore&#…...

C# 类库打包dll文件

目录 前言操作流程注意事项 前言 在C#中&#xff0c;有多种方式可以对代码进行加密&#xff0c;以保护源代码不被轻易查看或修改&#xff0c;这篇文章主要介绍将C# cs类文件加密为dll文件的方式进行保护。 操作流程 在 Visual Studio 中&#xff0c;选择“创建新项目”。 选…...

Linux中的UDP编程接口基本使用

UDP编程接口基本使用 本篇介绍 在前面网络基础部分已经介绍了网络的基本工作模式&#xff0c;有了这些理论基础之后&#xff0c;下面先从UDP编程开始从操作部分深入网络 在本篇中&#xff0c;主要考虑下面的内容&#xff1a; 创建并封装服务端&#xff1a;了解创建服务端的…...

RAG项目实战:金融问答系统

需求痛点 私有知识很多&#xff0c;如何让大模型只选择跟问题有关的知识进行参考呢&#xff1f; 需求分析 是否可以使用关键词匹配呢&#xff1f;以前的搜索主要使用关键词匹配&#xff0c;这个要求太高了&#xff0c;需要提前抽取准备好关键词&#xff0c;有点像以前SEO的工…...

大白话React第十一章React 相关的高级特性以及在实际项目中的应用优化

假设我们已经对 React 前端框架的性能和可扩展性评估有了一定了解&#xff0c;接下来的阶段可以深入学习 React 相关的高级特性以及在实际项目中的应用优化&#xff0c;以下是详细介绍及代码示例&#xff1a; 1. React 高级特性的深入学习 1.1 React 并发模式&#xff08;Con…...

虚拟机Linux操作(持续更新ing)

虚拟机操作(持续更新ing) 虚拟机基本操作(Linux) # Linux # 立刻关机 poweroff # 立刻关机&#xff0c;可以选择数字或者具体时间 shutdown -h now # 立刻重启&#xff0c;可以选择数字或者具体时间 shutdown -r now # 立刻重启 reboot # cd 切换目录,下面用根目录举例 cd /…...

【开源-线程池(Thread Pool)项目对比】

一些实现**线程池&#xff08;Thread Pool&#xff09;**功能的开源项目的对比分析。 线程池功能的开源项目 项目名称语言优点缺点适用场景开源代码链接ThreadPoolC简单易用&#xff0c;代码简洁&#xff1b;适合快速原型开发。功能较为基础&#xff0c;不支持动态调整线程数…...

JMeter 实战项目脚本录制最佳实践(含 BadBoy 录制方式)

JMeter 实战项目脚本录制最佳实践&#xff08;含 BadBoy 录制方式&#xff09; 一、项目背景 在软件测试过程中&#xff0c;使用 JMeter 进行性能测试和功能测试是常见的操作。本实战项目将详细介绍如何使用 JMeter 自带工具以及 BadBoy 进行脚本录制&#xff0c;并完善脚本以…...

NotebookLM视频转文字API未公开的底层协议解析:如何绕过30分钟时长限制并批量处理TB级教学视频

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;NotebookLM视频转文字功能概览与官方限制边界 NotebookLM 是 Google 推出的面向研究者与知识工作者的 AI 助手&#xff0c;其核心能力之一是基于用户上传的内容&#xff08;如 PDF、网页、音频&#xf…...

My-TODOs:免费开源跨平台桌面待办清单应用终极指南

My-TODOs&#xff1a;免费开源跨平台桌面待办清单应用终极指南 【免费下载链接】My-TODOs A cross-platform desktop To-Do list. 跨平台桌面待办小工具 项目地址: https://gitcode.com/gh_mirrors/my/My-TODOs 你是否经常忘记重要任务&#xff1f;是否在多个待办应用间…...

可观测性告警:及时发现和响应系统异常

可观测性告警&#xff1a;及时发现和响应系统异常 一、可观测性告警概述 1.1 可观测性告警的定义 可观测性告警是指基于系统的指标、日志和追踪数据&#xff0c;通过预设的规则和阈值&#xff0c;自动检测系统异常并发送通知的机制。它帮助运维人员及时发现问题&#xff0c;快速…...

预训练模型技术演进史:从Word2Vec到多模态大模型

1. 项目概述&#xff1a;这本“沙滩读物”到底在讲什么&#xff1f; “Beach Reading: a Short History of Pre-Trained Models”——光看标题&#xff0c;你可能会以为这是本躺在夏威夷躺椅上、椰子水还没喝完就能翻完的轻松小册子。但别被“Beach Reading”这个温柔前缀骗了。…...

RISC-V架构革命:从服务器到汽车电子的开放生态与定制化实践

1. 项目概述&#xff1a;一场架构革命的序章 最近几年&#xff0c;如果你关注处理器和芯片设计&#xff0c;有一个词的出现频率会越来越高&#xff1a;RISC-V。它不再仅仅是学术论文里的概念&#xff0c;也不再是极客圈子里的玩具。从云端的数据中心服务器&#xff0c;到我们每…...

DeepSpeech终极指南:离线语音识别的深度学习引擎完整实践

DeepSpeech终极指南&#xff1a;离线语音识别的深度学习引擎完整实践 【免费下载链接】DeepSpeech DeepSpeech is an open source embedded (offline, on-device) speech-to-text engine which can run in real time on devices ranging from a Raspberry Pi 4 to high power G…...

基于Rust与Skia构建高性能跨平台文本编辑器的架构设计与实现

1. 项目概述&#xff1a;为什么我们需要一款“超越者”&#xff1f;在程序员和文本工作者的日常工具箱里&#xff0c;文本编辑器占据着举足轻重的地位。它不像IDE那样庞大臃肿&#xff0c;却需要具备处理代码、日志、配置文件的强大能力。长久以来&#xff0c;Notepad以其轻量、…...

主芯片LP3717BTT+LP3568C,5V3.1A过认证适配器⽅案(电路原理图)

LP3717BTT LP3568C 是一套 5V/3.1A&#xff08;15.5W&#xff09;隔离型反激电源方案&#xff0c;主打"过认证、高效率、低温度"。LP3717BTT 是原边 PWM 控制器&#xff0c;LP3568C 是次级同步整流芯片&#xff0c;两者配合实现高精度恒压输出&#xff0c;板端效率可…...

从MySQL分区到OceanBase分区:迁移老手教你平滑过渡与性能调优

从MySQL分区到OceanBase分区&#xff1a;迁移老手教你平滑过渡与性能调优 当MySQL分区表遇上OceanBase分布式架构&#xff0c;传统设计思维往往成为性能瓶颈的源头。本文将揭示两种数据库分区机制的本质差异&#xff0c;并提供一套经过生产验证的迁移方法论&#xff0c;帮助您避…...

从‘乱码’到‘可读’:我是如何用LayoutLMv3和Tesseract拯救一份无法复制的PDF合同的

从‘乱码’到‘可读’&#xff1a;我是如何用LayoutLMv3和Tesseract拯救一份无法复制的PDF合同的 那天下午&#xff0c;法务部的同事急匆匆地推开了我的办公室门&#xff0c;手里拿着一份标着"紧急"的PDF合同。"这份合同扫描件里的文字全都无法选中&#xff0c;…...