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

周志华《机器学习导论》第9章 聚类

目录

1. 性能度量

2. 距离计算

3. 原型聚类

3.1 k-means

3.2 学习向量量化 LVQ

3.3 高斯混合聚类 Mixture-of-Gaussian

4. 密度聚类 DBSCAN

5. 层次聚类


聚类任务:属于无监督学习 把样本集按特征归类为 若干子集(簇)

1. 性能度量

理想效果:同一簇样本尽可能彼此相似,不同簇样本尽可能不同

如何刻画两种划分的相似性

对任意两两样本 要么同一簇 要么不同簇

a:两种划分 都分为同一簇  d:两种划分 都分为不同簇     b、c:一种同一簇 一种不同簇

一下三种计算指标 都取值为 [0,1] 并且越大代表两种划分越相似

      

簇内两点间的平均距离 

簇内两点间的最大距离 

两簇之间最近的两点距离 

两簇中心点距离 

刻画聚类性能的指标

 平均{ 簇内平均距离/簇间距离 } 越小越好

 簇间/簇内 越大越好

2. 距离计算

“有序属性” 能直接在属性值上计算距离    像 1与2近与3远

无序属性可采用 VDM ((Value Difference Metric)

像交通工具属性为{飞机,火车,轮船}无法直接刻画两两距离

属性u 取值为 a - b 之间的 VDM 距离为      每个样本簇取值为a的比例 取值为b的比例

非度量距离 

不满足直递性 

3. 原型聚类

对原型不断进行迭代更新。重复以下两个过程至收敛

已知模型的情况下 如何判定样本属于哪个类

已知每个样本属于哪个类的情况下 如何优化模型的参数

3.1 k-means

  簇内每个点和中心点距离

先取k个点作为中心点

1.所有点划分到 最近中心点的那簇(重新分类)

2.簇的内部取均值 重新计算 中心点 (优化模型)

3. 反复1.2 至收敛

通过解的表达转变: 通过确定簇 -> 中心点是哪个       通过中心点 -> 确定哪些点属于这个簇

用scikit-learn实现KMeans

3.2 学习向量量化 LVQ

我们用一个n维向量p 来代表一个簇。 样本集还带着一个类别标记y

随机选取样本(xj,yj) 计算所有簇向量p 最近的那个向量是p*

如果 p*=yj 说明分类正确 把p*向xj的方向再拉近一点

否则 p*把别人家的xj 拉错了  把 p*向xj的反方向拉远一点

3.3 高斯混合聚类 Mixture-of-Gaussian

假设知道参数 哪几个是一类?  假设知道这几个是一类 怎么优化参数?

高斯混合分布:k个高斯分布 先选是哪个分布

比如说西瓜总体分布由 1/5  3/5  1/5 的好中坏瓜组成。先选是哪种瓜这种瓜内部再高斯分布。

       

  

假设所有参数已知 向量xj 属于哪个簇呢

出现向量xj,且属于第i个簇 的概率为      

整个大群体内 出现向量xj 的概率为(k个簇的求和)

算属于 簇i 的贝叶斯后验概率  即属于概率(分子) 最大的那个簇

如何优化模型参数?

  求偏导得最优值

4. 密度聚类 DBSCAN

假设聚类结构能通过样本分布的紧密程度确定, 基于可连接样本不断扩展

DBSCAN 以邻域参数刻画 样本分布的紧密程度 有几个核心概念

核心对象:领域内样本数不少于阈值 MinPts

Xj 由Xi 密度直达:Xj在Xi的领域 且 Xi为核心对象

通过一系列密度直达:密度可达

存在3, 1和2均由3密度可达 则1和2密度相连

流程:1.选取一个核心对象点x 把它添加到队列Q 建立一个簇C

2.从Q里拿一个元素 如果是核心对象点 就把他邻域的未被标记的点都添加到Q和C 标记这些点

3.重复对Q进行入队出队 相对于把 与初始的核心对象点x 密度相连的点都添加到簇C里

需要调的参数 邻域大小    阈值 

scikit-learn的DBSCAN

5. 层次聚类

不同层次对数据集进行划分,形成树形的聚类结构

AGNES 自底向上:从单样本开始 每次循环找当前最近的两个聚类簇 将他们合并

http://www.xdnf.cn/news/15802.html

相关文章:

  • Linux基本操作
  • Linux内核设计与实现 - 第3章:Linux的进程
  • 使用python读取json数据,简单的处理成元组数组
  • 2026python实战——如何利用海外代理ip爬取海外数据
  • 【机器学习】AdamW可调参数介绍及使用说明
  • Ubuntu查看Docker容器
  • 双向广搜算法详解
  • 数据结构——单调栈
  • 服务管理智能化:R²AIN SUITE 升级带来的两大功能更新哪些值得关注?
  • SQLite / LiteDB 单文件数据库为何“清空表后仍占几 GB”?——原理解析与空间回收实战
  • 告别宕机!Ubuntu自动重启定时任务设置(一键脚本/手动操作)
  • 怎么自己搭建云手机
  • 数据库防止数组字符串序列化
  • 知识管理中的人工智能:概述、主要功能和管理工具
  • #vscode# #SSH远程# #Ubuntu 16.04# 远程ubuntu旧版Linux
  • 【Nginx】nginx+lua+redis实现限流
  • ARCS系统机器视觉实战(直播回放)
  • 医疗人工智能的心电图分析:创新技术与临床应用
  • Java面试宝典:Maven
  • 开源短链接工具 Sink 无需服务器 轻松部署到 Workers / Pages
  • nginx定制http头信息
  • 链表算法之【链表的中间节点】
  • 【Python】python 爬取某站视频批量下载
  • MyUI表单VcForm组件文档
  • Spring介绍以及IOC和AOP的实现
  • SpringBoot项目创建,三层架构,分成结构,IOC,DI相关,@Resource与@Autowired的区别
  • Camera相机人脸识别系列专题分析之十七:人脸特征检测FFD算法之libhci_face_camera_api.so 296点位人脸识别检测流程详解
  • Flutter——Android原生View是如何通过Flutter进行加载
  • 关于Mysql开启慢查询日志报错:13 - Permission denied的解决方案
  • logback日志控制服务器日志输出