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

【机器学习】聚类算法分类与探讨

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢迎在文章下方留下你的评论和反馈。我期待着与你分享知识、互相学习和建立一个积极的社区。谢谢你的光临,让我们一起踏上这个知识之旅!
请添加图片描述

文章目录

  • 🍋聚类算法基础
  • 🍋K均值聚类算法
  • 🍋DBSCAN及其派生算法
  • 🍋AGNES(自底向上聚类)算法
  • 🍋聚类评估指标
  • 🍋示例完整代码(CoNLL-2003数据集)
  • 🍋总结

🍋聚类算法基础

  • 定义及重要性:聚类是一种无监督的机器学习方法,旨在将数据集划分为若干簇,使得同一簇内的数据点相似度高,不同簇之间的数据点差异大。聚类在客户分群、图像分割、文本分类和生物信息学等领域有广泛应用。
  • 聚类算法的种类
    • 划分式算法(如K均值):基于数据点之间的距离,直接将数据划分为若干簇。
    • 密度式算法(如DBSCAN):根据数据密度分布,将密度较高的区域识别为簇。
    • 层次式算法(如AGNES):通过层次结构进行聚类,可以生成树状的层次结构。
    • 网格式算法:将空间划分为网格,以网格为单位进行聚类(如CLIQUE算法)。

🍋K均值聚类算法

  • 概述:K均值是一种基于划分的方法。首先选择K个初始质心,然后通过迭代优化,将每个数据点分配到距离最近的质心,更新质心位置,直到收敛。其目标是最小化簇内的方差。

  • 工作原理:

    • 选择K个初始质心。
    • 计算每个数据点与质心的距离,将数据点分配到最近的质心所在的簇中。
    • 更新每个簇的质心,重新计算每个簇的平均值。
    • 重复步骤2和3,直到质心位置不再变化或达到最大迭代次数。
  • 优缺点:K均值在处理大规模数据时效率高,但其对初始质心的选择敏感,可能陷入局部最优;另外,K的值需要提前确定。

from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
import numpy as np# 生成一些示例数据
X = np.random.rand(100, 2)# 初始化K均值模型
kmeans = KMeans(n_clusters=3, random_state=42)
kmeans.fit(X)# 获取聚类结果
labels = kmeans.labels_# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.scatter(kmeans.cluster_centers_[:, 0], kmeans.cluster_centers_[:, 1], s=300, c='red', marker='X')
plt.title("K-Means Clustering")
plt.show()

扩展:可进一步介绍K均值++初始化方法(K-means++),通过优化初始质心选择来提高收敛性和结果质量。

🍋DBSCAN及其派生算法

  • 概述:DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,通过定义邻域半径(eps)和最小样本数(min_samples)来识别簇。密度足够高的区域被识别为簇,而密度不足的点则被视为噪声。

  • 工作原理

    • 对于每个点,如果在其邻域半径内的点数超过min_samples,则将其标记为核心点。
    • 将核心点的邻域扩展为一个簇,将所有能够通过密度连接的点归入此簇。
    • 重复此过程,直到所有点都被分配到某个簇或标记为噪声。
  • 优缺点:DBSCAN能够识别任意形状的簇,适合含有噪声的数据集,但对参数eps和min_samples敏感。

from sklearn.cluster import DBSCAN
import matplotlib.pyplot as plt
import numpy as np# 生成一些示例数据
X = np.random.rand(100, 2)# 初始化DBSCAN模型
dbscan = DBSCAN(eps=0.1, min_samples=5)
dbscan.fit(X)# 获取聚类结果
labels = dbscan.labels_# 可视化结果
plt.scatter(X[:, 0], X[:, 1], c=labels)
plt.title("DBSCAN Clustering")
plt.show()

派生算法:可介绍HDBSCAN(基于密度的层次聚类算法),它能在不同密度下自动调节,适用于密度变化较大的数据集。

🍋AGNES(自底向上聚类)算法

  • 概述:AGNES(Agglomerative Nesting)是一种层次聚类算法,通过自底向上合并每个样本或簇,构建树状的层次结构。它不需要提前设定簇的数量。

  • 工作原理

    • 将每个数据点视为一个独立的簇。
    • 计算每对簇之间的距离,合并最近的两个簇。
    • 重复步骤2,直到只剩下一个簇,或者达到预设的簇数。
  • 连接方法:可以采用不同的连接方法,包括单连接(Single Linkage)、全连接(Complete Linkage)、平均连接(Average Linkage)和Ward连接。

from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt
import numpy as np# 生成一些示例数据
X = np.random.rand(10, 2)# 使用AGNES(层次聚类)
Z = linkage(X, method='ward')# 可视化层次聚类的树状图
plt.figure(figsize=(10, 5))
dendrogram(Z)
plt.title("AGNES Hierarchical Clustering Dendrogram")
plt.show()

扩展:还可以介绍如何确定层次聚类的最佳分割点,比如通过树状图的“拐点”或使用轮廓系数评估分割效果。

🍋聚类评估指标

常用指标:

  • 轮廓系数(Silhouette Score):衡量簇内一致性和簇间分离度的指标,范围为-1到1,值越大越好。
  • DBI指数(Davies-Bouldin Index):计算每个簇的离散性和簇间的相似性,值越小聚类效果越好。
  • SSE(Sum of Squared Errors):用于K均值聚类,衡量簇内方差的总和。
from sklearn.metrics import silhouette_score# 计算轮廓系数
score = silhouette_score(X, labels)
print(f'Silhouette Score: {score}')

🍋示例完整代码(CoNLL-2003数据集)

import pandas as pd
import numpy as np
from sklearn.cluster import KMeans, DBSCAN, AgglomerativeClustering
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.metrics import silhouette_score
from nltk.corpus import conll2003
from nltk import download# 下载 CoNLL-2003 数据集
download('conll2003')# 提取 CoNLL-2003 数据集
def load_conll_data():sentences = []for sentence in conll2003.iob_sents():words = [word for word, _, _ in sentence]sentences.append(" ".join(words))return sentences# 特征提取
def extract_features(texts):vectorizer = TfidfVectorizer(stop_words='english')return vectorizer.fit_transform(texts)# 聚类评估
def evaluate_clustering(model, X):labels = model.labels_ if hasattr(model, 'labels_') else model.predict(X)return silhouette_score(X, labels)# 加载数据
texts = load_conll_data()# 提取特征
X = extract_features(texts)# 初始化不同的聚类算法
kmeans = KMeans(n_clusters=5, random_state=42)
dbscan = DBSCAN(eps=0.5, min_samples=5)
agg_clustering = AgglomerativeClustering(n_clusters=5)# 聚类模型训练
kmeans.fit(X)
dbscan.fit(X)
agg_clustering.fit(X)# 聚类评估
kmeans_score = evaluate_clustering(kmeans, X)
dbscan_score = evaluate_clustering(dbscan, X)
agg_score = evaluate_clustering(agg_clustering, X)# 输出评估结果
print(f"K-means Silhouette Score: {kmeans_score:.4f}")
print(f"DBSCAN Silhouette Score: {dbscan_score:.4f}")
print(f"Agglomerative Clustering Silhouette Score: {agg_score:.4f}")
  • CoNLL-2003 数据集:我们通过 nltk.corpus.conll2003 来加载 CoNLL-2003 数据集。每个句子的词语通过 iob_sents() 提取并合并成文本形式。
  • 特征提取:我们使用 TfidfVectorizer 将文本转换为 TF-IDF 特征表示,移除英文停用词。
  • 聚类算法:我们使用三种不同的聚类算法:
    • K-means:我们指定 n_clusters=5(你可以根据需要调整)。
    • DBSCAN:这里我们指定了 eps=0.5 和 min_samples=5,这两个参数可以调节以优化聚类效果。
    • 层次聚类:使用 AgglomerativeClustering 进行层次聚类,并设置 n_clusters=5。
  • 评估:使用 轮廓系数(Silhouette Score)来评估聚类效果。轮廓系数越接近 1 表示聚类效果越好,接近 -1 表示聚类效果差。

🍋总结

如何选择合适的聚类算法:

  • 对于大规模、结构简单的数据集,K均值可能更合适。
  • 含有噪声或非凸形状的数据集,DBSCAN表现较好。
  • 层次结构明显或需要层次划分的数据,可以选择AGNES。

实际应用场景:

  • 客户分群:使用K均值或层次聚类对客户数据进行分类,提供个性化服务。
  • 图像分割:利用DBSCAN识别图像中的物体轮廓。
  • 文本聚类:通过层次聚类对新闻或文档进行分组,形成主题集群。

请添加图片描述

挑战与创造都是很痛苦的,但是很充实。

相关文章:

【机器学习】聚类算法分类与探讨

💗💗💗欢迎来到我的博客,你将找到有关如何使用技术解决问题的文章,也会找到某个技术的学习路线。无论你是何种职业,我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章,也欢…...

MySQL中distinct与group by之间的性能进行比较

在 MySQL 中,DISTINCT 和 GROUP BY 都是用于去重或汇总数据的常用 SQL 语法。尽管它们在某些情况下能产生相同的结果,但它们的内部工作方式和性能表现可能有所不同。理解这两者的差异,对于选择正确的语法非常重要,尤其是在处理大量…...

计算机视觉读书系列(1)——基本知识与深度学习基础

研三即将毕业,后续的工作可能会偏AI方向的计算机视觉方面,因此准备了两条线来巩固计算机视觉基础。 一个是本系列,阅读经典《Deep Learning for Vision System》,做一些总结跑一些例子,也对应本系列文章 二是OpenCV实…...

怎么查看navicat的数据库密码

步骤1:打开navicat连接数据库工具&#xff0c;顶部的文件栏-导出结果-勾选导出密码-导出 步骤2&#xff1a;导出结果使用NotePad或文本打开&#xff0c;找到&#xff0c;数据库对应的的Password"995E66F64A15F6776“”的值复制下来 <Connection ConnectionName"…...

webrtc前端播放器完整案例

https://download.csdn.net/download/jinhuding/89961792...

GORM优化器和索引提示

在使用 GORM 进行数据库操作时&#xff0c;优化器和索引提示可以帮助你提高查询性能。GORM 提供了一些方法来利用这些特性。 优化器提示 优化器提示&#xff08;Optimizer Hints&#xff09;是数据库系统提供的功能&#xff0c;用于指导查询优化器如何处理查询。不同的数据库…...

linux驱动-i2c子系统框架学习(1)

可以将整个 I2C 子系统用下面的框图来描述&#xff1a; 可以将上面这一 I2C 子系统划分为三个层次&#xff0c;分别为用户空间、内核空间和硬件层&#xff0c;内核空间就包括 I2C 设备驱动层、I2C 核心层和 I2C 适配器驱动层&#xff0c; 本篇主要内容就是介绍 I2C 子系统框架中…...

元戎启行嵌入式面试题及参考答案

介绍下 CAN 通信原理 控制器局域网(CAN)是一种串行通信协议,主要用于汽车、工业自动化等领域的电子控制单元(ECU)之间的通信。 其通信原理是基于多主站架构。在总线上,多个节点(设备)都可以主动发起通信。CAN 协议使用差分信号来传输数据,通过两条信号线 CAN_H 和 CAN…...

【EasyExcel】EasyExcel导出表格包含合计行、自定义样式、自适应列宽

目录 0 EasyExcel简介1 Excel导出工具类设置自定义表头样式设置自适应列宽添加合计行 2 调用导出工具类导出Excel表3 测试结果 0 EasyExcel简介 在数据处理和报表生成的过程中&#xff0c;Excel是一个非常常用的工具。特别是在Java开发中&#xff0c;EasyExcel库因其简单高效而…...

es数据同步(仅供自己参考)

数据同步的问题分析&#xff1a; 当MySQL进行增删改查的时候&#xff0c;数据库的数据有所改变&#xff0c;这个时候需要修改es中的索引库的值&#xff0c;这个时候就涉及到了数据同步的问题 解决方法&#xff1a; 1、同步方法&#xff1a; 当服务对MySQL进行增删改的时候&…...

apt镜像源制作-ubuntu22.04

# 安装必要的软件 sudo apt-get install -y apt-mirror # 编辑/etc/apt/mirror.list,添加以下内容 set base_path /var/spool/apt-mirror # 指定要镜像的Ubuntu发布和组件-null dir jammy-updates main restricted universe multiverse # 镜像的Ubuntu发布和组件的URL-n…...

libaom 源码分析: 预测编码过程梳理

AV1 预测编码中核心技术 AV1(AOMedia Video 1)作为一种开源的视频编码格式,其预测编码核心技术主要包括以下几个方面: 分区树分割模块: AV1利用多类型分割模式,递归地对图像/视频序列进行分区,以捕捉更丰富的空间信息,从而提升编码效率。这包括新的方向预测分割模式及…...

从0开始学习Linux——Yum工具

往期目录&#xff1a; 从0开始学习Linux——简介&安装 从0开始学习Linux——搭建属于自己的Linux虚拟机 从0开始学习Linux——文本编辑器 上一个章节我们简单了解了Linux中常用的一些文本编辑器&#xff0c;本次教程我们将学习yum工具。 一、Yum简介 Yum&#xff08;全名…...

【Linux】Linux管道揭秘:匿名管道如何连接进程世界

&#x1f308;个人主页&#xff1a;Yui_ &#x1f308;Linux专栏&#xff1a;Linux &#x1f308;C语言笔记专栏&#xff1a;C语言笔记 &#x1f308;数据结构专栏&#xff1a;数据结构 &#x1f308;C专栏&#xff1a;C 文章目录 1.什么是管道 &#xff1f;2. 管道的类型2.1 匿…...

【LeetCode】【算法】155. 最小栈

LeetCode 155. 最小栈 题目描述 设计一个支持 push &#xff0c;pop &#xff0c;top 操作&#xff0c;并能在常数时间内检索到最小元素的栈。 实现 MinStack 类: MinStack() 初始化堆栈对象。 void push(int val) 将元素val推入堆栈。 void pop() 删除堆栈顶部的元素。 int …...

3.3 windows,ReactOS系统中页面的换出----1

系列文章目录 文章目录 系列文章目录3.3 页面的换出MiBalancerThread()MmTrimUserMemory&#xff08;&#xff09;MmPageOutVirtualMemory&#xff08;&#xff09; 3.3 页面的换出 在前一节中我们看到&#xff0c;如果有映射的页面已经被倒换到磁盘上即倒换文件中&#xff0c…...

QCustomPlot添加自定义的图例,实现隐藏、删除功能(二)

文章目录 实现步骤:详细代码示例:实现原理和解释:使用方法:其他参考要实现一个支持复选框来控制曲线显示和隐藏的自定义 QCPLegend 类,可以通过继承 QCPLegend 并重写绘制和事件处理方法来实现,同时发出信号通知曲线的状态变更。 实现步骤: 继承 QCPLegend 类,添加绘…...

Linux云计算 |【第五阶段】CLOUD-DAY8

主要内容&#xff1a; 掌握DaemonSet控制器、污点策略&#xff08;NoSchedule、Noexecute&#xff09;、Job / CronJob资源对象、掌握Service服务、服务名解析CluterIP&#xff08;服务名自动发现&#xff09;、&#xff08;Nodeport、Headless&#xff09;、Ingress控制器 一…...

岛屿数量 广搜版BFS C#

和之前的卡码网深搜版是一道题 力扣第200题 99. 岛屿数量 题目描述 给定一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的矩阵&#xff0c;你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成&#xff0c;并且四周都是水域。…...

hive切换表底层文件类型以及分隔符

1、改底层文件存储类型&#xff0c;但是一般只会在数据文件与期望类型一致的时候使用&#xff0c;比如load等方式时发现建表时没指定对这样的&#xff0c;因为这个语句不会更改具体的底层文件内容&#xff0c;只改元数据 ALTER TABLE 表名 SET FILEFORMAT 希望类型;2、更改数据…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作&#xff1a; 1&#xff09;、切换集群 2&#xff09;、切换节点 3&#xff09;、切换到 apparmor 的目录 4&#xff09;、执行 apparmor 策略模块 5&#xff09;、修改 pod 文件 6&#xff09;、…...

云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地

借阿里云中企出海大会的东风&#xff0c;以**「云启出海&#xff0c;智联未来&#xff5c;打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办&#xff0c;现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...

Python实现prophet 理论及参数优化

文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候&#xff0c;写过一篇简单实现&#xff0c;后期随着对该模型的深入研究&#xff0c;本次记录涉及到prophet 的公式以及参数调优&#xff0c;从公式可以更直观…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

Java求职者面试指南:Spring、Spring Boot、MyBatis框架与计算机基础问题解析

Java求职者面试指南&#xff1a;Spring、Spring Boot、MyBatis框架与计算机基础问题解析 一、第一轮提问&#xff08;基础概念问题&#xff09; 1. 请解释Spring框架的核心容器是什么&#xff1f;它在Spring中起到什么作用&#xff1f; Spring框架的核心容器是IoC容器&#…...

VM虚拟机网络配置(ubuntu24桥接模式):配置静态IP

编辑-虚拟网络编辑器-更改设置 选择桥接模式&#xff0c;然后找到相应的网卡&#xff08;可以查看自己本机的网络连接&#xff09; windows连接的网络点击查看属性 编辑虚拟机设置更改网络配置&#xff0c;选择刚才配置的桥接模式 静态ip设置&#xff1a; 我用的ubuntu24桌…...

Webpack性能优化:构建速度与体积优化策略

一、构建速度优化 1、​​升级Webpack和Node.js​​ ​​优化效果​​&#xff1a;Webpack 4比Webpack 3构建时间降低60%-98%。​​原因​​&#xff1a; V8引擎优化&#xff08;for of替代forEach、Map/Set替代Object&#xff09;。默认使用更快的md4哈希算法。AST直接从Loa…...

关于uniapp展示PDF的解决方案

在 UniApp 的 H5 环境中使用 pdf-vue3 组件可以实现完整的 PDF 预览功能。以下是详细实现步骤和注意事项&#xff1a; 一、安装依赖 安装 pdf-vue3 和 PDF.js 核心库&#xff1a; npm install pdf-vue3 pdfjs-dist二、基本使用示例 <template><view class"con…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...