聚类--机器学习西瓜书阅读笔记(六)
无监督学习:通过对无标记训练样本的学习,揭示数据内在规律和性质。
聚类试图将数据集中的样本划分为若干不相交的子集,聚类过程自动形成簇结构,簇对应的语义需要子集命名把握。
聚类过程可以作为单独的过程,寻找数据内在分布结构,也可作为其他任务的前驱过程。
聚类涉及的两个基本问题——————性能度量和距离计算
性能度量(有效性指标):外部指标、内部指标,明确性能度量可以作为聚类过程的优化目标。
距离度量:常用闵可夫斯基距离。
闵可夫斯基距离可用于有序属性(可以直接在属性值上计算距离);
VDM用于无序属性(不能直接在属性值上计算距离);
闵可夫斯基距离和VDM结合可以处理混合属性。
样本空间中,不同属性的重要性不同,可以使用加权距离。
一般基于距离定义相似性度量,距离越大,相似性度量越大,用于相似性度量的距离未必一点要满足距离度量所有基本属性(非负、同一、对称、直递),即非度量距离。现实任务中,有必要基于数据样本确定合适的距离计算。
原型聚类:假设聚类结构能通过一度原型刻画
原型:样本空间中具有代表性的点。
K均值算法(k-means):属于NP问题,采用贪心策略
具体步骤包括:
- 初始化:随机选择K个数据点作为初始的簇质心。
- 分配:根据每个数据点与各个簇质心的距离,将其分配给最近的簇。
- 更新:重新计算每个簇的质心,即取簇内所有数据点的平均值作为新的质心。
- 迭代:重复分配和更新步骤,直到满足某种终止条件(如簇质心不再发生显著变化或达到预设的迭代次数)。需要设置最大运行次数和最小调整幅度阈值。
优点:
- 算法简单,易于实现。
- 计算效率高,适合处理大规模数据集。
- 可以识别出任意形状的聚类,只要聚类是凸形的。
缺点:
- 对初始聚类中心的选择敏感,不同的初始值可能导致不同的聚类结果。
- 需要预先指定聚类数目K,但K值往往难以确定。
- 对噪声和异常值敏感,可能影响聚类结果。
- 只适合发现具有相似方差的聚类,且聚类是凸形的。
为了改善K-means算法对初始聚类中心选择的敏感性,K-means++算法被提出。K-means++的主要改进在于初始聚类中心的选取方式:
- 从数据集中随机选择一个点作为第一个聚类中心。
- 对于数据集中的每个点,计算其到已选择的聚类中心的距离。
- 选择下一个聚类中心,其被选中的概率与到已选择聚类中心的距离的平方成正比。
- 重复步骤2和3,直到选择了K个聚类中心。
K-means算法的变种和改进:
- K-means||:一种快速的K-means算法,用于大规模数据集。
- 模糊C均值(FCM):允许数据点属于多个聚类,具有一定程度的隶属度。
- 基于密度的K-means:结合了密度信息,更适合处理非球形聚类。
学习向量量化(LVQ)
数据带有标签,学习过程利用监督信心辅助聚类。
假设给定样本集,共m个,每个样本是由n个属性描述的特征向量。LVQ的学习目标,学得一组n维原型向量,每个原型向量代表一个聚类簇。形成对样本空间的簇划分,称为Voronoi剖分。
LVQ的工作流程主要包括以下步骤:
- 初始化:随机选择若干个初始码本向量,每个向量对应一个类别标签。
- 训练:对于每一个输入样本,算法计算其与所有码本向量之间的距离,并将其归为最近的类别。然后根据LVQ更新规则,调整最近类别对应的码本向量的位置。
- 迭代优化:重复上述过程直至达到预设的停止条件,如达到最大迭代次数或误差率低于阈值。
LVQ算法的更新规则
- 当输入样本与正类别原型的距离小于负类别原型时,正类别原型会向输入样本移动;
- 反之,则远离输入样本。这一动态更新机制确保了码本向量能够逐步逼近训练集各类别的边界,实现更准确的分类决策边界学习。
优点:
- LVQ具有直观易理解的特点,它的解释性强,能直接生成可视化的分类边界。
- 算法训练速度快,适用于实时或增量式学习场景。
- 结构简单,不需要复杂的反向传播过程。
缺点:
- 对初始码本向量的选择敏感,不同的初始化可能会导致不同的收敛结果。
- 当类间边界复杂时,LVQ可能无法很好地捕捉特征空间的拓扑结构,特别是在高维数据集中表现一般。
- 对噪声和异常值较为敏感,可能导致过拟合或欠拟合。
高斯混合聚类:利用概率模型表达原型聚类
是一种基于概率的聚类算法,它假设数据是由多个高斯分布混合而成的。GMC使用期望最大化(Expectation-Maximization, EM)算法来估计数据的生成模型参数,包括各个高斯分布的均值、协方差和混合系数。这种算法特别适用于数据集中存在多个子群体且这些群体具有不同统计特性的情况。
算法原理
GMC的核心思想是将数据集表示为多个高斯分布的混合。每个高斯分布(也称为组件)都有其自己的均值、协方差和混合权重。算法的目标是找到一组参数,使得这些高斯分布的混合能够最好地拟合观测数据。GMC通过迭代的方式进行参数估计:
- E步(期望步骤):计算每个数据点属于每个高斯分布的后验概率。
- M步(最大化步骤):根据这些后验概率,更新每个高斯分布的参数,以最大化观测数据的似然。
优缺点
优点:
- 能够处理多维数据,并且可以很好地拟合数据的分布。
- 可以处理混合分布数据,提供灵活的聚类形状。
- 软聚类特性为数据点提供了属于每个聚类的概率,表达不确定性。
缺点:
- 计算复杂度高,尤其是在大数据集上。
- 对初始化敏感,不同的初始化可能导致不同的聚类结果。
- 需要预先指定高斯分布的数量,这可能需要领域知识或通过交叉验证等方法确定。
- 对异常值敏感,且可能遇到协方差矩阵奇异的问题。
变体和优化
为了解决GMC的一些局限性,研究者们提出了多种变体和优化方法,例如:
- 带有协方差约束的GMM:对协方差矩阵施加约束,如球形、对角或带对角线约束,以简化模型或避免过度拟合。
- 变分贝叶斯GMM:通过引入先验分布和变分推断来自动确定聚类的数量,减少对初始化的依赖。
高斯混合聚类是一种强大的聚类工具,尤其适用于数据中存在多个潜在子群体的情况。通过为每个数据点提供属于每个聚类的概率信息,它提供了对数据的更丰富的解释。
密度聚类
假设聚类的结构能通过样本分布的紧密程度确定,从样本密度的角度考察样本之间的可连接性,基于可连接样本不断扩展聚类簇获得结果。是基于数据空间中密度分布的聚类方法,它特别适用于发现任意形状的聚类,并且能够处理噪声数据。密度聚类方法的主要优点是它们不依赖于距离度量,能够发现任意形状的聚类,并且对噪声数据具有较好的鲁棒性。然而,这些算法通常需要仔细选择参数,以确保聚类结果的有效性。此外,密度聚类算法在处理大规模数据集时可能会遇到性能瓶颈,因此常常需要采用索引结构或基于网格的方法来加速密度估计
DBSCAN是一种著名的密度聚类方法,基于一组邻域参数刻画样本分布近密程度。
- DBSCAN算法的核心思想是利用密度的概念来识别聚类。它将具有足够密度的区域划分为聚类,并能够在具有噪声的空间数据库中发现任意形状的聚类。
- 算法通过两个主要参数来工作:
Eps
(邻域的最大半径)和MinPts
(在Eps邻域中的最少点数)。 - DBSCAN将数据点分为三类:核心点、边界点和噪声点。核心点的邻域内点的数量满足最小密度要求,边界点位于核心点的邻域内但本身不是核心点,而噪声点则是不满足核心点或边界点条件的点。
- DBSCAN的优点包括能够发现任意形状的聚类、对噪声不敏感,且不需要预先指定聚类数目。缺点是对参数
Eps
和MinPts
敏感,且在高维数据中表现可能不佳
OPTICS (Ordering Points To Identify the Clustering Structure)
- OPTICS算法是DBSCAN的一种扩展,它通过排序点来识别聚类结构,允许发现不同密度的聚类。
- 该算法引入了核心距离和可达距离的概念,使得聚类过程对输入参数不那么敏感
DENCLUE (Density-based Clustering with Noise and Cluster Estimation)
- DENCLUE算法基于密度分布函数进行聚类,其主要思想是通过估计数据点的密度分布来识别聚类结构。
- 该算法通过选择一个合适的密度阈值来确定聚类的核心点,并将其他点根据其与核心点的密度关系归入相应的聚类
层次聚类
试图从不同层次对数据进行划分,形成树形聚类结构,采用策略:自底向上、自顶向下。
自底向上的聚合(Agglomerative Clustering):AGNES算法
- 初始化:每个数据点被视为一个单独的聚类。
- 合并:在每一步中,算法会找到最近的两个聚类并将它们合并成一个更大的聚类。
- 重复:重复合并步骤,直到所有的数据点都合并成一个聚类,或者达到某个停止条件。
- 树状图:这个过程可以用树状图(Dendrogram)来表示,树状图展示了聚类合并的顺序和距离。
自顶向下的分裂(Divisive Clustering)
- 初始化:所有数据点开始时都在一个聚类中。
- 分裂:在每一步中,算法会选择一个聚类并将其分裂成两个或更多的子聚类。
- 重复:重复分裂步骤,直到每个聚类只包含一个数据点,或者达到某个停止条件。
- 树状图:这个过程同样可以用树状图来表示,但与聚合方法相反,树状图从顶部开始,向下展示分裂的过程。
距离度量
在层次聚类中,选择适当的距离度量非常重要,常用的距离度量包括:
- 欧氏距离(Euclidean Distance):最常见的距离度量,适用于大多数情况。
- 曼哈顿距离(Manhattan Distance):在城市街区模型中使用,计算两点在标准坐标系上的绝对轴距总和。
- 余弦相似度(Cosine Similarity):常用于文本数据,衡量两个向量之间的夹角。
链接方法
在层次聚类中,合并聚类时使用的链接方法也很重要,常见的链接方法包括:
- 最近邻链接(Single Linkage):基于两个聚类中最近的两个点的距离。
- 完全链接(Complete Linkage):基于两个聚类中最远的两个点的距离。
- 平均链接(Average Linkage):基于两个聚类中所有点对的平均距离。
- Ward方法:最小化聚类内差异的平方和。
层次聚类的结果可以通过剪切树状图来确定聚类的数量,这通常需要一些主观判断。层次聚类是一种非常灵活的聚类方法,适用于各种不同的数据类型和规模。
相关文章:
聚类--机器学习西瓜书阅读笔记(六)
无监督学习:通过对无标记训练样本的学习,揭示数据内在规律和性质。 聚类试图将数据集中的样本划分为若干不相交的子集,聚类过程自动形成簇结构,簇对应的语义需要子集命名把握。 聚类过程可以作为单独的过程,寻找数据…...

OpenHarmony(1)开发环境搭建
一:开源项目 OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及运营的开源项目,目标是面向全场景、全连接、全智能时代,基于开源的方式,搭建一个智能终端设备操作系统的框架和平台࿰…...

Triton服务在ASR语音识别系统中的实现
Triton服务在ASR语音识别系统中的实现 一、引言二、环境准备1. 硬件环境2. 软件环境 三、模型选择与训练1. 数据准备2. 模型架构3. 模型训练 四、模型转换与优化1. 模型转换2. 模型优化 五、配置Triton服务1. 安装Triton服务2. 创建模型仓库 一、引言 自动语音识别(…...

Typora一款极简Markdown文档编辑、阅读器,实时预览,所见即所得,多主题,免费生成序列号!
文章目录 Typora下载安装Typora序列号生成 Typora是一款Markdown编辑器和阅读器,风格极简,实时预览,所见即所得,支持MacOS、Windows、Linux操作系统,有图片和文字、代码块、数学公式、图表、目录大纲、文件管理、导入导…...

python机器人编程——用python调用API控制wifi小车的实例程序
目录 一、前言二、一个客户端的简单实现2.1 首先定义一个类及属性2.2 其次定义连接方法2.3 定义一些回调函数2.4 定义发送小车指令方法2.5 定义一个正常关闭方法 三、python编程控制小车的demo实现四、小结PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源p…...

面试学习整理-线程池
线程池 简介JUC包线程池介绍线程池最常问也最常用-参数线程执行分析-线程是怎么运行的进程和线程的区别Executors工厂类提供四种线程池Executors和ThreaPoolExecutor创建线程池的区别两种提交任务的方法spring集成的线程池 简介 线程池作为实际使用和面试较多的技能区, 学习是…...
Debian会取代CentOS成为更主流的操作系统吗?
我们知道,其实之前的话,国内用户对centos几乎是情有独钟的偏爱,很多人都喜欢选择centos系统,可能是受到一些原因的影响导致的吧,比如他相当于免费的红帽子系统,或者一些教程和网上的资料都推荐这个系统&…...

网络安全领域推荐证书介绍及备考指南
在网络安全领域,拥有专业认证不仅可以证明个人的专业能力,还能帮助在实际工作中应用先进的技术和知识。以下是几种热门的网络安全证书介绍及备考指南。 1. OSCP (Offensive Security Certified Professional) 证书简介 OSCP是针对渗透测试领域的入门级…...

SpringBoot项目ES6.8升级ES7.4.0
SpringBoot项目ES6.8.15 升级到 ES7.4.0 前言 由于公司内部资产统一整理,并且公司内部部署有多个版本的es集群,所以有必要将目前负责项目的ES集群升级到公司同一版本7.4.0。es6到es7的升级变化还是挺大的,因此在这里做一下简单记录…...

深度学习 之 模型部署 使用Flask和PyTorch构建图像分类Web服务
引言 随着深度学习的发展,图像分类已成为一项基础的技术,被广泛应用于各种场景之中。本文将介绍如何使用Flask框架和PyTorch库来构建一个简单的图像分类Web服务。通过这个服务,用户可以通过HTTP POST请求上传花朵图片,然后由后端…...

MFC工控项目实例二十六创建数据库
承接专栏《MFC工控项目实例二十五多媒体定时计时器》 用选取的型号为文件名建立文件夹,再在下面用测试的当天的时间创建文件夹,在这个文件中用测试的时/分/秒为数据库名创建Adcess数据库。 1、在StdAfx.h文件最下面添加代码 #import "C:/Program F…...

springmvc源码流程解析(一)
Springmvc 是基于servlet 规范来完成的一个请求响应模块,也是spring 中比较大的一个 模块,现在基本上都是零xml 配置了,采用的是约定大于配置的方式,所以我们的springmvc 也是采用这种零xml 配置的方式。 要完成这种过程ÿ…...
【论文阅读】SRGAN
学习资料 论文题目:基于生成对抗网络的照片级单幅图像超分辨率(Photo-Realistic Single Image Super-Resolution Using a Generative Adversarial Network)论文地址:https://arxiv.org/abs/1609.04802代码:GitHub - xiph/daala: Modern video compression for the interne…...

kubelet PLEG实现
概述 kubelet的主要作用是确保pod状态和podspec保持一致,这里的pod状态包括pod中的container状态,个数等。 为了达到这个目的,kubelet需要从多个来源watch pod spec的变化,并周期从container runtime获取最新的container状态。比如…...

leetcode49:字母异位词分组
给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "tea", "tan", "ate", "nat", &…...

一个将.Geojson文件转成shapefile和kml文件的在线页面工具(续)
接上一专栏:这个网址有个bug,每个月只能免费转3次,这等于没用! 一个将.Geojson文件转成shapefile和kml文件的在线页面工具_geojson转shp在线-CSDN博客 下面这个网址实测可以免费多次转换! Quickmaptools : Geojson to…...

论文阅读(二十四):SA-Net: Shuffle Attention for Deep Convolutional Neural Networks
文章目录 Abstract1.Introduction2.Shuffle Attention3.Code 论文:SA-Net:Shuffle Attention for Deep Convolutional Neural Networks(SA-Net:置换注意力机制) 论文链接:SA-Net:Shuffle Attention for Deep Convo…...

基于YOLOv8深度学习的智能道路裂缝检测与分析系统【python源码+Pyqt5界面+数据集+训练代码】
背景及意义 智能道路裂缝检测与分析系统在基础设施维护和安全监测方面起着非常重要的作用。道路裂缝是道路衰老和破坏的早期迹象,若不及时发现和修复,可能会导致道路结构的进一步恶化,甚至引发安全事故。本文基于YOLOv8深度学习框架ÿ…...

YOLOv11入门到入土使用教程(含结构图)
一、简介 YOLOv11是Ultralytics公司在之前的YOLO版本上推出的最新一代实时目标检测器,支持目标检测、追踪、实力分割、图像分类和姿态估计等任务。官方代码:ultralytics/ultralytics:ultralytics YOLO11 🚀 (github.com)https://g…...

python 爬虫抓取百度热搜
实现思路: 第1步、在百度热搜页获取热搜元素 元素类名为category-wrap_iQLoo 即我们只需要获取类名category-wrap_为前缀的元素 第2步、编写python脚本实现爬虫 import requests from bs4 import BeautifulSoupurl https://top.baidu.com/board?tabrealtime he…...
Vim 调用外部命令学习笔记
Vim 外部命令集成完全指南 文章目录 Vim 外部命令集成完全指南核心概念理解命令语法解析语法对比 常用外部命令详解文本排序与去重文本筛选与搜索高级 grep 搜索技巧文本替换与编辑字符处理高级文本处理编程语言处理其他实用命令 范围操作示例指定行范围处理复合命令示例 实用技…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案
随着新能源汽车的快速普及,充电桩作为核心配套设施,其安全性与可靠性备受关注。然而,在高温、高负荷运行环境下,充电桩的散热问题与消防安全隐患日益凸显,成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...

学习STC51单片机32(芯片为STC89C52RCRC)OLED显示屏2
每日一言 今天的每一份坚持,都是在为未来积攒底气。 案例:OLED显示一个A 这边观察到一个点,怎么雪花了就是都是乱七八糟的占满了屏幕。。 解释 : 如果代码里信号切换太快(比如 SDA 刚变,SCL 立刻变&#…...
C++.OpenGL (14/64)多光源(Multiple Lights)
多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...
日常一水C
多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

Scrapy-Redis分布式爬虫架构的可扩展性与容错性增强:基于微服务与容器化的解决方案
在大数据时代,海量数据的采集与处理成为企业和研究机构获取信息的关键环节。Scrapy-Redis作为一种经典的分布式爬虫架构,在处理大规模数据抓取任务时展现出强大的能力。然而,随着业务规模的不断扩大和数据抓取需求的日益复杂,传统…...
验证redis数据结构
一、功能验证 1.验证redis的数据结构(如字符串、列表、哈希、集合、有序集合等)是否按照预期工作。 2、常见的数据结构验证方法: ①字符串(string) 测试基本操作 set、get、incr、decr 验证字符串的长度和内容是否正…...