机器学习——聚类问题

news/发布时间2024/5/14 17:47:08

📕参考:西瓜书+ysu老师课件+博客(3)聚类算法之DBSCAN算法 - 知乎 (zhihu.com)


目录

1.聚类任务

 2.聚类算法的实现

2.1 划分式聚类方法

2.1.1 k均值算法

k均值算法基本原理:

k均值算法算法流程:

2.2 基于密度聚类方法

2.2.1 DBSCAN

 DBSCAN的基本概念

 DBSCAN算法定义

2.3 基于层次聚类方法

2.3.1 AGNES

AGNES算法流程


【涉及到的英文单词】

无监督学习  unsupervised learning

聚类  clustering

簇  cluster

簇标记 cluster  label

有效性指标  validity index

簇内相似度  intra-cluster similarity

簇间相似度  inter-cluster similarity

外部指标  external index

内部指标  internal index

基于原型的聚类  prototype-based clustering

基于密度的聚类  density-based clustering

噪声  noise

异常  anomaly

DBSCAN Density-Based Spatial Clustering of Applications with Noise

AGNES  Agglomerative Nesting


1.聚类任务

【聚类任务的引入】

  • 在“无监督学习” (unsupervised learning) 中,训练样本的标记信息是未知的。
  • 目标是通过对无标记训练样本的学习来揭示数据的内在性质及规律,为进一步的数据分析提供基础。
  • 此类任务中研究最多、应用最广的是“聚类”。

【什么是聚类】

 聚类,试图将数据集中的样本划分为若干个通常是不相交的子集,每个子集称为一个“簇”。

通过这样的划分,每个簇可能对应一些潜在的概念(类别),如“浅色瓜”、“深色瓜”、“有籽瓜”、“无籽瓜”......

【注】这些概念对聚类算法而言,是未知的。聚类过程仅能自动形成簇结构,簇所对应的概念语义需由使用者来把握和命名。

接下来谈一下聚类算法的聚类指标——性能度量

聚类性能度量,亦称为聚类“有效性指标”(validity index)。

与监督学习中的性能度量作用类似,对聚类结果,我们需要通过某种性能度量来评估其好坏;另一方面,若明确了最终将要使用的性能度量,则可直接将其作为聚类过程的优化目标。

聚类是将样本集D划分为若干互不相交的子集,即样本簇。那么什么样的聚类结果比较好呢?

直观上,我们希望“物以类聚”,即同一簇的样本尽可能彼此相似,不同簇的样本尽可能不同。

也就是,聚类结果的“簇内相似度”(intra-cluster similarity)高,且“簇间相似度”(inter-cluster similarity)低,这样的聚类效果较好。

【聚类性能度量】:

外部指标(external index):将聚类结果与某个“参考模型” 进行比较

内部指标(internal index):直接考察聚类结果而不使用任何参考模型

【外部指标】:

 【内部指标】

补充,距离计算

 2.聚类算法的实现

【原型聚类】

“原型”是指样本空间中具有代表性的点。

 原型聚类,此类算法假设聚类结构能通过一组原型刻画,在现实聚类任务中极为常用。

2.1 划分式聚类方法

基于划分的聚类方法 :

给定一个数据集 D,其包含有 n 个数据对象,用一个划分方法来构建数据的 k 个划分,每一个划分表示一个类,且 k≤n。

2.1.1 k均值算法

k均值算法基本原理:

随机选取k个点作为初始的聚类中心点,根据每个样本到聚类中心点之间的距离,把样本归类到相距它距离最近的聚类中心代表的类中,再计算样本均值。

若相邻的两个聚类中心无变化,结束迭代;如若不然,不断重复进行该过程。

k均值算法算法流程:

1.选取质心

随机选择 k 个初始质心,其中 k 是用户指定的参数,即所期望的簇的个数。

2.分配数据点

对于样本中的数据对象,根据它们与聚类中心的距离,按距离最近的准则将它们划分到距离它们最近的聚类中心,形成一个簇。

3.更新聚类中心

根据指派到簇的点,将每个簇的质心更新为该簇所有点的平均值。

4.判断是否结束 

判断聚类中心的值是否发生变化,若改变,则重复执行上述步骤;若不变,则输出结果。

2.2 基于密度聚类方法

密度聚类,亦称“基于密度的聚类”(density-based clustering),此类算法假设聚类结构能通过样本分布的紧密程度确定。

通常情况下,密度聚类算法从样本密度的角度来考察样本之间的可连接性,并基于可连接样本不断扩展聚类簇,以获得最终的聚类结果。

基于密度聚类方法的代表算法是DBSCAN。

2.2.1 DBSCAN

DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的聚类方法):基于一组“邻域”参数 (ϵ,MinPts) 来刻画样本分布的紧密程度。

 DBSCAN的基本概念

邻域:就是以x_j为圆心,\varepsilon为半径,画一个圆,在圆内的样本点,构成这个邻域

核心对象:如果x_j的邻域内的样本点的个数超过了MinPts(这是一个数值),那么这个x_j就是一个核b

密度直达:如果x_ix_j的邻域内,且x_j是核心对象,那么就称x_ix_j密度直达。但是反过来不一定成立,因为前提条件是x_j是核心对象,所以密度直达不满足对称性

密度可达:就是一系列密度直达的样本点传递,使x_i密度可达x_j(密度可达的前提是这些点密度直达,密度直达的前提是这些点是核心对象,所以密度可达的点都是核心对象,并且具不满足对称性)。

看图理解:

画图理解,,,,我的建议是直接看大佬的文

(3)聚类算法之DBSCAN算法 - 知乎 (zhihu.com)

MinPts=5的意思是,如果x_j的邻域内有≥5个样本点,那么x_j就是一个核心对象。

 DBSCAN算法定义

D中不属于任何簇的样本被认为是噪声 (noise)或异常(anomaly) 样本。

 那么,如何从数据集D 中找出满足以上性质的聚类簇呢?

DBSCAN算法先任选数据集中的一个核心对象为“种子”,再由此出发确定相应的聚类簇。

1.找核心对象

根据 (ϵ,MinPts) 对 n 个对象进行搜索,寻找所有的核心对象,构成核心对象集合。

2.成簇 

根据上述的核心对象寻找 D 中所有密度相连的样本,构成簇,若上述核心对象已被访问,则剔除出去。

3.重复 

重复上述过程,直至核心对象集合为空。

其它问题 

  • 异常点问题:一些异常样本点或者说少量游离于簇外的样本点,这些点不在任何一个核心对象在周围,在DBSCAN中,我们一般将这些样本点标记为噪音点。
  • 距离度量问题:即如何计算某样本和核心对象样本的距离。在DBSCAN中,一般采用最近邻思想,采用某一种距离度量来衡量样本距离,比如欧式距离、曼哈顿距离等。
  • 数据点优先级分配问题:例如某些样本可能到两个核心对象的距离都小于 ϵ ,但是这两个核心对象由于不是密度直达,又不属于同一个聚类簇,那么如果界定这个样本的类别呢?一般来说,此时 DBSCAN采用先来后到,先进行聚类的类别簇会标记这个样本为它的类别。也就是说DBSCAN的算法不是完全稳定的算法。

 这个是大佬的博客里的:(3)聚类算法之DBSCAN算法 - 知乎 (zhihu.com)

2.3 基于层次聚类方法

层次聚类试图在不同层次对数据集进行划分,从而形成树形的聚类结构。

数据集的划分可以采用“自底向上”的聚合策略,也可采用“自顶向下”的分拆策略。因此可分为聚合层次聚类与划分层次聚类。

  • 聚合层次聚类:采用自底向上的策略。开始时 , 每个样本对象自己就是一个类 , 称为原子聚类 , 然后根据这些样本之间的相似性 , 将这些样本对象 ( 原子聚类 ) 进行合并。
  • 划分层次聚类:采用自顶向下的策略,它首先将所有对象置于同一个簇中,然后逐渐细分为越来越小的簇,直到每个对象自成一簇,或者达到了某个终止条件。该种方法一般较少使用。

2.3.1 AGNES

AGNES是一种采用自底向上聚合策略的层次聚类算法。

它先将数据集中的每个样本看作一个初始聚类簇,然后在算法运行的每一步中找出距离最近的两个聚类簇进行合并,该过程不断重复,直至达到预设的聚类簇个数。

这里的关键是如何计算聚类簇之间的距离。

实际上,每个簇是一个样本集合,因此只需采用关于集合的某种距离即可。

AGNES算法流程

给定包含 n 个对象的数据集 D ,聚类簇距离度量函数 d,聚类簇数为 k。

1.计算所有样本间的距离

使用度量函数 d 计算所有样本间的距离。

2.更新聚类簇及样本间距离

将距离最近的两个聚类簇进行合并,计算合并后的聚类簇间的距离。

3.重复

重复上述过程,直至聚类簇数为设定的参数 k。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.bcls.cn/sVoO/631.shtml

如若内容造成侵权/违法违规/事实不符,请联系编程老四网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

爱上JVM——常见问题(一):JVM组成

1 JVM组成 1.1 JVM由那些部分组成,运行流程是什么? 难易程度:☆☆☆ 出现频率:☆☆☆☆ JVM是什么 Java Virtual Machine Java程序的运行环境(java二进制字节码的运行环境) 好处: 一次编写&…

寒假作业-day5

1>现有无序序列数组为23,24,12,5,33,5347&#xff0c;请使用以下排序实现编程 函数1:请使用冒泡排序实现升序排序 函数2:请使用简单选择排序实现升序排序 函数3:请使用直接插入排序实现升序排序 函数4:请使用插入排序实现升序排序 代码&#xff1a; #include<stdio.h&g…

chatGPT免费AI交互产品的应用

概述 前提条件及结果&#xff1a; 1、会翻墙&#xff0c;别问我为什么&#xff1b; 2、无需注册chatgpt账号&#xff1b; 3、通过注册第三方账号来免费无限次使用chatgpt&#xff1b; 工具&#xff1a; 翻墙工具&#xff0c;请自行搜索度娘&#xff0c;不用来问我。 第三…

Java实现停车场收费系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 停车位模块2.2 车辆模块2.3 停车收费模块2.4 IC卡模块2.5 IC卡挂失模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 停车场表3.2.2 车辆表3.2.3 停车收费表3.2.4 IC 卡表3.2.5 IC 卡挂失表 四、系统实现五、核心代码…

Spring Boot 笔记 012 创建接口_添加文章分类

1.1.1 实体类添加校验 package com.geji.pojo;import jakarta.validation.constraints.NotEmpty; import lombok.Data;import java.time.LocalDateTime;Data public class Category {private Integer id;//主键IDNotEmptyprivate String categoryName;//分类名称NotEmptypriva…

深入探索Pandas读写XML文件的完整指南与实战read_xml、to_xml【第79篇—读写XML文件】

深入探索Pandas读写XML文件的完整指南与实战read_xml、to_xml XML&#xff08;eXtensible Markup Language&#xff09;是一种常见的数据交换格式&#xff0c;广泛应用于各种应用程序和领域。在数据处理中&#xff0c;Pandas是一个强大的工具&#xff0c;它提供了read_xml和to…

C# CAD2016 判断多边形的方向正时针或逆时针旋转

方法一&#xff1a;基于相邻顶点相对位置判断顺时针排列 // 计算当前子序列是否为顺时针排列 for (int i 1; i < outerPoints.Count; i) {int index (startVertexIndex i) % outerPoints.Count;int prevIndex (startVertexIndex i - 1) % outerPoints.Count;Point2d c…

java SSM新闻管理系统myeclipse开发mysql数据库springMVC模式java编程计算机网页设计

一、源码特点 java SSM新闻管理系统是一套完善的web设计系统&#xff08;系统采用SSM框架进行设计开发&#xff0c;springspringMVCmybatis&#xff09;&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S…

面试经典150题——矩阵置零

​"Dream it. Wish it. Do it." - Unknown 1. 题目描述 2. 题目分析与解析 2.1 思路一——暴力求解 思路一很简单&#xff0c;就是尝试遍历矩阵的所有元素&#xff0c;如果发现值等于0&#xff0c;就把当前行与当前列的值分别置为0。同时我们需要注意&#xff0c;…

java面试微服务篇

目录 目录 SpringCloud Spring Cloud 的5大组件 服务注册 Eureka Nacos Eureka和Nacos的对比 负载均衡 负载均衡流程 Ribbon负载均衡策略 自定义负载均衡策略 熔断、降级 服务雪崩 服务降级 服务熔断 服务监控 为什么需要监控 服务监控的组件 skywalking 业务…

Linux--编译器-gcc/g++使用

目录 前言 1.看一段样例 2.程序的翻译过程 1.第一个阶段&#xff1a;预处理 2.第二个阶段&#xff1a;编译 3.第三个阶段&#xff1a;汇编 4.第四个阶段&#xff1a;链接 3.程序的编译为什么是这个样子&#xff1f; 4. 关于编译器 5.链接&#xff08;动静态链接&#x…

[Flink04] Flink部署实践

Flink部署支持三种模式&#xff1a;本地部署、Standalone部署、Flink on Yarn部署。 独立&#xff08;Standalone&#xff09;模式由Flink自身提供资源&#xff0c;无需其他框架&#xff0c;这种方式降低了和其他第三方资源框架的耦合性&#xff0c;独立性非常强。但Flink 是大…

负载均衡下webshell连接nginx解析漏洞、sql注入第一关

首先搭建环境找到php较低的版本改一下账号密码输入?id1 正常 输入?id1 报错 .0 输入?id1-- 正常 判断是字符型注入&#xff0c;闭合方式是 id是1后台看是数据表里第一行 查询id1出错前端打印出了报错信息语法错误这里是找到了库名&#xff0c;接下来是找表名这个方法是…

微信小程序-表单提交和校验

一、使用vant组件生成如下页面 二、前端代码如下 <form bindsubmit"submitForm"><view class"cell-group"><van-cell-group><van-field value"{{ title }}" label"商品名称" placeholder"请输入商品名称&qu…

ActiveMQ高可用架构涉及常用功能整理

ActiveMQ高可用架构涉及常用功能整理 1. activemq的集群模式2. 镜像模式高可用系统架构和相关组件2.1 架构说明2.2 相关概念说明2.3 消息模型2.3.1 点对点2.3.2 发布订阅 3. activemq常用命令4. activemq配置集群5. 疑问和思考5.1 activemq的数据删除策略是怎样的&#xff1f;5…

片上网络NoC(3)——拓扑指标

目录 一、概述 二、指标 2.1 与网络流量无关的指标 2.1.1 度&#xff08;degree&#xff09; 2.1.2 对分带宽&#xff08;bisection bandwidth&#xff09; 2.1.3 网络直径&#xff08;diameter&#xff09; 2.2 与网络流量相关的指标 2.2.1 跳数&#xff08;hop coun…

SpringCloud之Feign发送Http请求

文章目录 http客户端Feign使用步骤自定义Feign的配置Feign的性能优化Feign的性能优化-连接池配置 Feign的最佳实践 http客户端Feign Feign的介绍&#xff1a; Feign是一个声明式的http客户端&#xff0c;官方地址&#xff1a;https:/github.com/OpenFeign/feign 其作用就是帮助…

Unity3D中刚体、碰撞组件、物理组件的区别详解

前言 Unity3D提供了丰富的功能和组件&#xff0c;其中包括刚体、碰撞组件和物理组件。这些组件在游戏开发中起着非常重要的作用&#xff0c;能够让游戏世界更加真实和有趣。本文将详细介绍这三种组件的区别以及如何在Unity3D中实现它们。 对惹&#xff0c;这里有一个游戏开发…

PyCharm - Run Debug 程序安全执行步骤

PyCharm - Run & Debug 程序安全执行步骤 1. Run2. DebugReferences 1. Run right click -> Run ‘simulation_data_gene…’ or Ctrl Shift F10 2. Debug right click -> Debug ‘simulation_data_gene…’ 在一个 PyCharm 工程下&#xff0c;存在多个 Pytho…

怎么使用ChatGPT提高工作效率?

怎么使用ChatGPT提高工作效率&#xff0c;这是一个有趣的话题。 相信不同的人有不同的观点&#xff0c;大家的知识背景和从事的工作都不完全相同&#xff0c;所以最终ChatGPT能起到的作用也不一样。 在编程过程中&#xff0c;如果我们要找一个库&#xff0c;我们最先做的肯定…
推荐文章