聚类--机器学习西瓜书阅读笔记(六)
无监督学习:通过对无标记训练样本的学习,揭示数据内在规律和性质。
聚类试图将数据集中的样本划分为若干不相交的子集,聚类过程自动形成簇结构,簇对应的语义需要子集命名把握。
聚类过程可以作为单独的过程,寻找数据内在分布结构,也可作为其他任务的前驱过程。
聚类涉及的两个基本问题——————性能度量和距离计算
性能度量(有效性指标):外部指标、内部指标,明确性能度量可以作为聚类过程的优化目标。
距离度量:常用闵可夫斯基距离。
闵可夫斯基距离可用于有序属性(可以直接在属性值上计算距离);
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…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例
文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...
视频字幕质量评估的大规模细粒度基准
大家读完觉得有帮助记得关注和点赞!!! 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用,因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型(VLMs)在字幕生成方面…...
【HTML-16】深入理解HTML中的块元素与行内元素
HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...
ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
Maven 概述、安装、配置、仓库、私服详解
目录 1、Maven 概述 1.1 Maven 的定义 1.2 Maven 解决的问题 1.3 Maven 的核心特性与优势 2、Maven 安装 2.1 下载 Maven 2.2 安装配置 Maven 2.3 测试安装 2.4 修改 Maven 本地仓库的默认路径 3、Maven 配置 3.1 配置本地仓库 3.2 配置 JDK 3.3 IDEA 配置本地 Ma…...
C++使用 new 来创建动态数组
问题: 不能使用变量定义数组大小 原因: 这是因为数组在内存中是连续存储的,编译器需要在编译阶段就确定数组的大小,以便正确地分配内存空间。如果允许使用变量来定义数组的大小,那么编译器就无法在编译时确定数组的大…...
PAN/FPN
import torch import torch.nn as nn import torch.nn.functional as F import mathclass LowResQueryHighResKVAttention(nn.Module):"""方案 1: 低分辨率特征 (Query) 查询高分辨率特征 (Key, Value).输出分辨率与低分辨率输入相同。"""def __…...
Vue 3 + WebSocket 实战:公司通知实时推送功能详解
📢 Vue 3 WebSocket 实战:公司通知实时推送功能详解 📌 收藏 点赞 关注,项目中要用到推送功能时就不怕找不到了! 实时通知是企业系统中常见的功能,比如:管理员发布通知后,所有用户…...
数据库正常,但后端收不到数据原因及解决
从代码和日志来看,后端SQL查询确实返回了数据,但最终user对象却为null。这表明查询结果没有正确映射到User对象上。 在前后端分离,并且ai辅助开发的时候,很容易出现前后端变量名不一致情况,还不报错,只是单…...
