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

机器学习——聚类算法-层次聚类算法

机器学习——聚类算法-层次聚类算法

在机器学习中,聚类是一种将数据集划分为具有相似特征的组或簇的无监督学习方法。聚类算法有许多种,其中一种常用的算法是层次聚类算法。本文将介绍聚类问题、层次聚类算法的原理、算法流程以及用Python实现层次聚类算法的示例。

聚类问题

聚类问题是指给定一个数据集,将其中的样本划分为若干组,使得同一组内的样本相似度高,而不同组之间的样本相似度低。聚类算法通常用于探索数据的内在结构,发现数据中的模式或隐藏的信息,以及进行数据的降维和预处理。

层次聚类算法

层次聚类是一种自下而上或自上而下的聚类方法,它不需要事先指定聚类的个数。层次聚类算法主要有两种形式:凝聚式(agglomerative)和分裂式(divisive)。在凝聚式层次聚类中,每个样本开始时被认为是一个独立的簇,然后逐渐合并为越来越大的簇,直到满足某个停止条件为止。而在分裂式层次聚类中,则是从一个包含所有样本的簇开始,逐渐分裂成越来越小的簇,直到每个簇都只包含一个样本为止。

层次聚类算法的原理

层次聚类算法的基本原理是通过计算样本之间的相似度(距离)来构建一个聚类树(树状图),从而得到样本之间的聚类关系。具体来说,层次聚类算法的步骤如下:

  1. 计算样本之间的距离: 首先,计算任意两个样本之间的距离或相似度。常用的距离度量包括欧氏距离、曼哈顿距离、余弦相似度等。

  2. 初始化聚类: 将每个样本初始化为一个簇。

  3. 合并最近的簇: 从距离矩阵中找到距离最近的两个簇,并将它们合并成一个新的簇。

  4. 更新距离矩阵: 更新距离矩阵,以反映新簇与其他簇之间的距离。

  5. 重复步骤3和步骤4,直到满足停止条件为止: 可以根据停止条件来决定何时停止合并簇,常见的停止条件包括簇的数量达到预设值、距离超过阈值等。

层次聚类算法的公式

层次聚类算法中常用的距离度量包括欧氏距离、曼哈顿距离、余弦相似度等。以欧氏距离为例,两个样本点 (x_i) 和 (x_j) 之间的欧氏距离可以表示为:

[
d(x_i, x_j) = \sqrt{\sum_{k=1}^{n}(x_{ik} - x_{jk})^2}
]

其中,(n) 是特征的数量。

Python实现层次聚类算法示例

下面是使用Python实现凝聚式层次聚类算法的示例代码:

from sklearn.datasets import load_iris
from scipy.cluster.hierarchy import dendrogram, linkage
import matplotlib.pyplot as plt# 加载数据集
iris = load_iris()
X = iris.data# 计算距离矩阵
Z = linkage(X, 'ward')# 绘制树状图
plt.figure(figsize=(10, 5))
plt.title('Hierarchical Clustering Dendrogram')
plt.xlabel('Sample Index')
plt.ylabel('Distance')
dendrogram(Z, leaf_rotation=90., leaf_font_size=8.)
plt.show()

在这里插入图片描述

这段代码使用了load_iris函数加载了鸢尾花数据集,并计算了样本之间的距离矩阵。然后,使用linkage函数构建了层次聚类树,最后通过dendrogram函数绘制了树状图,展示了样本之间的聚类关系。

总结

层次聚类算法是一种无需预先指定簇数的聚类方法,它通过计算样本之间的相似度来构建聚类树,从而得到样本之间的聚类关系。本文介绍了层次聚类算法的原理、步骤以及Python实现的示例代码。通过层次聚类算法,可以对数据集进行探索性分析,发现数据中的内在结构和模式。

相关文章:

  • hive 、spark 、flink之想一想
  • 使用Spring Cloud Gateway构建API网关,实现路由、过滤、流量控制等功能。
  • H5小程序视频方案解决方案,实现轻量化视频制作
  • 从根本上优雅地解决 VSCode 中的 Python 模块导入问题
  • 阿里云部署宝塔,设置了安全组还是打不开。
  • 递归算法 分析json字符串,自制简易表达式
  • 校园app开发流程-uniapp开发-支持APP小程序H5-源码交付-跑腿-二手市场-交友论坛等功能,学校自由选择!
  • Microsoft VBA Excel 单元格 重复元素 去重
  • 利用python脚本,根据词条爬取百度图片(爬虫)
  • 基于 YAML 接口自动化测试框架设计
  • 设计模式——行为型——策略模式Strategy
  • vue2项目设置浏览器标题title及图标logo
  • Django批量插入和分页器
  • 阿里云 -- 连接云服务器ECS、管理云服务器ECS、WordPress 页面配置
  • uniapp H5 开发,公众号时请求跨域了,要用proxy
  • 【面试系列】之二:关于js原型
  • Android 架构优化~MVP 架构改造
  • css属性的继承、初识值、计算值、当前值、应用值
  • GraphQL学习过程应该是这样的
  • mysql 数据库四种事务隔离级别
  • SQLServer之索引简介
  • Webpack4 学习笔记 - 01:webpack的安装和简单配置
  • zookeeper系列(七)实战分布式命名服务
  • 从零搭建Koa2 Server
  • 基于MaxCompute打造轻盈的人人车移动端数据平台
  • 浏览器缓存机制分析
  • 如何胜任知名企业的商业数据分析师?
  • 深度学习之轻量级神经网络在TWS蓝牙音频处理器上的部署
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (1)SpringCloud 整合Python
  • (30)数组元素和与数字和的绝对差
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (Demo分享)利用原生JavaScript-随机数-实现做一个烟花案例
  • (备忘)Java Map 遍历
  • (二)linux使用docker容器运行mysql
  • (剑指Offer)面试题41:和为s的连续正数序列
  • (蓝桥杯每日一题)love
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)菜鸟学数据库(三)——存储过程
  • (最优化理论与方法)第二章最优化所需基础知识-第三节:重要凸集举例
  • .naturalWidth 和naturalHeight属性,
  • .net core 6 使用注解自动注入实例,无需构造注入 autowrite4net
  • .NET Core 网络数据采集 -- 使用AngleSharp做html解析
  • .NET LINQ 通常分 Syntax Query 和Syntax Method
  • .NET WebClient 类下载部分文件会错误?可能是解压缩的锅
  • .Net 知识杂记
  • .NET/C# 推荐一个我设计的缓存类型(适合缓存反射等耗性能的操作,附用法)
  • @Autowired 与@Resource的区别
  • @WebService和@WebMethod注解的用法
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [BZOJ 4129]Haruna’s Breakfast(树上带修改莫队)
  • [BZOJ1060][ZJOI2007]时态同步 树形dp
  • [C++]C++基础知识概述
  • [CentOs7]图形界面