机器学习算法基础--层次聚类法

news2024/11/29 1:35:48

文章目录

    • 1.层次聚类法原理简介
    • 2.层次聚类法基础算法演示
      • 2.1.Single-linkage的计算方法演示
      • 2.2.Complete-linkage的计算方法演示
      • 2.3.Group-average的计算方法演示
    • 3.层次聚类法拓展算法介绍
      • 3.1.质心法原理介绍
      • 3.2.基于中点的质心法
      • 3.3.Ward方法
    • 4.层次聚类法应用实战
      • 4.1.层次聚类法聚类应用
      • 4.2.层次聚类法聚类树绘制
        • 4.2.1.Single-linkage连接方法
        • 4.2.2.Complete-linkage连接方法
        • 4.2.3.Group-average连接方法
        • 4.2.4.Centroid连接方法
        • 4.2.5.Ward连接方法
    • 5.致谢

1.层次聚类法原理简介

#聚合聚类(层次聚类方法)
"""
1.层次聚类顾名思义就是按照某个层次对样本集进行聚类操作,这里层次并非是真实的层次,实际上指的就是某种距离定义,(我们其实已经学过了很多的距离定义了)
2.层次聚类方法的目标就是采用自下而上的方法去去消除类别的数量,类似与树状图的由叶子结点向根结点靠拢的过程。
3.更简单的说,层次聚类是将初始化的多个类簇看做树节点,每一次迭代都会两两距离相近的类簇进行合并,如此反复,直至最终只剩一个类簇(也就是根结点)。
"""

2.层次聚类法基础算法演示

层次聚类法的三种不同方法:
依据对相似度(距离)的不同定义,将层次聚类法的聚类方法分为三种:
1.Single-linkage:要比较的距离为元素对之间的最小距离。
2.Complete-linkage:要比较的距离为元素对之间的最大距离。
3.Group average:要比较的距离为类之间的平均距离。
我们首先拿出几个数据进行计算演示一番这最基础的算法,如图所示,这是ABCDE五个点的相互之间的距离:
在这里插入图片描述

2.1.Single-linkage的计算方法演示

Single-linkage:要比较的距离为元素对之间的最小距离。所以我们需要找到每个点对应的最小距离。
第一步:A的最小距离是B,所以AB先合并,记作{AB}。
在这里插入图片描述
第二步:以AB为整体进行对C合并的研究。在这里插入图片描述
最后发现CD最短,合并记作{CD}。
第三步:以{AB}/{CD}为整体进行对E合并的研究。
在这里插入图片描述
最后发现CD->E最短,合并记作{CDE}。
第四步:合并最后的两个簇即可,即{AB}{CDE}合并。

2.2.Complete-linkage的计算方法演示

2.Complete-linkage:要比较的距离为元素对之间的最大距离。所以我们需要找到每个点对应的最大距离。
第一步:A与各个元素之间的最大距离的最小距离是B,所以AB先合并,记作{AB}。
aad5384fbf5f056a6.png)
第二步:
C与各元素的最大距离的最小值如下所示:
在这里插入图片描述
所以C的各元素的最大距离的最小值是D,合并CD并且记作{CD}。
第三步:以{AB}/{CD}为整体进行对E合并的研究。
在这里插入图片描述
最后发现CD->E最短,合并记作{CDE}。
第四步:合并最后的两个簇即可,即{AB}{CDE}合并。

2.3.Group-average的计算方法演示

Group-average要比较的距离为元素对之间的最平均距离。所以我们需要找到每个点对应的最平均距离。
第一步:A与各个元素之间的最大距离的最小距离是B,所以AB先合并,记作{AB}。
aad5384fbf5f056a6.png)
第二步:
C与各元素的平均距离的最小值如下所示:
在这里插入图片描述
所以C的各元素的最平均距离的最小值是D,合并CD并且记作{CD}。
第三步:以{AB}/{CD}为整体进行对E合并的研究。
在这里插入图片描述
最后发现CD->E的平均距离最短,合并记作{CDE}。
第四步:合并最后的两个簇即可,即{AB}{CDE}合并。

3.层次聚类法拓展算法介绍

来源:https://blog.csdn.net/huangguohui_123/article/details/106995538

3.1.质心法原理介绍

在这里插入图片描述
如果两个族群合并之后,下一步合并时的最小距离反而减小(质心在不断变化),我们则称这种情况为倒置(Reversal/Inversion),在系统树图中表现为交叉(Crossover)现象。

在一些层次聚类方法中,如简单连接、完全连接和平均连接,倒置不可能发生,这些距离的度量是单调的(monotonic)。显然质心方法并不是单调的。

3.2.基于中点的质心法

在这里插入图片描述

3.3.Ward方法

在这里插入图片描述

4.层次聚类法应用实战

4.1.层次聚类法聚类应用

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import make_blobs
from sklearn.cluster import AgglomerativeClustering
from scipy.cluster.hierarchy import dendrogram, linkage
#%%
# 读取数据
data = pd.read_excel('Clustering_5.xlsx')
# 提取特征和标签
X = data.iloc[:, :2].values
y = data['y'].values
# 创建凝聚聚类模型
n_clusters = 5
agg_clustering = AgglomerativeClustering(n_clusters=n_clusters)
# 进行聚类
labels = agg_clustering.fit_predict(X)
#%%
# 绘制聚类结果
plt.figure(figsize=(10, 6))
for i in range(n_clusters):
    cluster_points = X[labels == i]
    plt.scatter(cluster_points[:, 0], 
                cluster_points[:, 1], label=f'Cluster {i + 1}',s=16)

plt.title('Agglomerative clustering')
plt.legend()
plt.show()

聚类效果比较不错
在这里插入图片描述

4.2.层次聚类法聚类树绘制

4.2.1.Single-linkage连接方法
#%%
linked = linkage(X, 'single')  # 使用ward方法计算链接
dendrogram(linked, orientation='top', 
           distance_sort='descending', show_leaf_counts=True)
plt.title('Single-linkage连接方法')
plt.show()

在这里插入图片描述

4.2.2.Complete-linkage连接方法
#%%
linked = linkage(X, 'complete')  # 使用ward方法计算链接
dendrogram(linked, orientation='top', 
           distance_sort='descending', show_leaf_counts=True)
plt.title('Complete-linkage连接方法')
plt.show()

在这里插入图片描述

4.2.3.Group-average连接方法
#%%
linked = linkage(X, 'average')  # 使用ward方法计算链接
dendrogram(linked, orientation='top', 
           distance_sort='descending', show_leaf_counts=True)
plt.title('Group-average连接方法')
plt.show()

在这里插入图片描述

4.2.4.Centroid连接方法
#%%
linked = linkage(X, 'centroid')  # 使用ward方法计算链接
dendrogram(linked, orientation='top', 
           distance_sort='descending', show_leaf_counts=True)
plt.title('Centroid连接方法')
plt.show()

在这里插入图片描述

4.2.5.Ward连接方法
# 绘制树状图(聚类树)
linked = linkage(X, 'ward')  # 使用ward方法计算链接
dendrogram(linked, orientation='top', 
           distance_sort='descending', show_leaf_counts=True)
plt.title('Ward连接方法')
plt.show()

在这里插入图片描述

5.致谢

本章内容的完成离不开以下大佬文章的启发和帮助,在这里列出名单,如果对于内容还有不懂的,可以移步对应的文章进行进一步的理解分析。
1.层次聚类法的基础算法演示https://blog.csdn.net/qq_40206371/article/details/123057888
2.层次聚类法的进阶算法演示https://blog.csdn.net/huangguohui_123/article/details/106995538
在文章的最后再次表达由衷的感谢!!

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java21 新特性

文章目录 1. 概述2. JDK21 安装与配置3. 新特性3.1 switch模式匹配3.2 字符串模板3.3 顺序集合3.4 记录模式(Record Patterns)3.5 未命名类和实例的main方法(预览版)3.6 虚拟线程 1. 概述 2023年9月19日 ,Oracle 发布了…

【Linux】完美解决ubuntu18.04下vi不能使用方向键和退格键

今天在刚安装完ubuntu18.04,发现在使用vi命令配置文件时使用方向键并不能移动光标,而是出现一堆奇怪的英文字母,使用退格键也不能正常地删除内容,用惯了CentOS的我已经感觉到ubuntu没有centos用着丝滑,但是没办法&…

C++ -- 学习系列 std::deque 的原理与使用

一 deque 是什么? std::deque 是 c 一种序列式容器,其与 vector 类似,其底层内存都是连续的,不同的地方在于, vector 是一端开口,在一端放入数据与扩充空间,而 deque 是双端均开口,都可以放…

lv5 嵌入式开发-10 信号机制(下)

目录 1 信号集、信号的阻塞 2 信号集操作函数 2.1 自定义信号集 2.2 清空信号集 2.3 全部置1 2.4 将一个信号添加到集合中 2.5 将一个信号从集合中移除 2.6 判断一个信号是否在集合中 2.7 设定对信号集内的信号的处理方式(阻塞或不阻塞) 2.8 使进程挂起(…

NLP 01(介绍)

一、NLP 自然语言处理 (Natural Language rrocessing,简称NLP) 是计算机科学与语言学中关注于计算机与人类语言间转换的领域。 1.1 发展 规则:基于语法 自然语言处理的应用场景: 语音助手 机器翻译 搜索引擎 智能问答

Windows下安装MySQL8详细教程

Windows下安装MySQL8详细教程 因为需要在Windows下安装MySQL8的数据库,做一个临时数据库环境。 1.准备软件 使用社区版本,下载地址如下: https://dev.mysql.com/downloads/mysql/ 使用8.0.16版本,需要在归档中查找 选择版本&a…

pysimpleGui 使用之sg.SaveAs使用

SaveAs与FileBrowse使用一样需要给指定target参数,保存路径 layout [ [ sg.FileBrowse( button_text“请选择单个文件”, # 按钮文本 target“single_path”, # 把选择后的路径保存到key为input_path的对象 # file_types((“All Files”, “.”),), # 默认筛选全部…

Python+Yolov8路面桥梁墙体裂缝识别

程序示例精选 PythonYolov8路面桥梁墙体裂缝识别 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonYolov8路面桥梁墙体裂缝识别》编写代码,代码整洁,规则&#…

如何应用MBTI职业性格测试来做职业规划

想要有一个不错的职业发展,需要做好职业规划。通常来说,职业规划可以分为三个组成,即定位、目标和路径。应用MBTI职业性格测试,可以对上述三个组成有更清晰的认识,帮助人们完成适合自己的职业规划。 职业性格和职业定…

Pytorch之ResNet图像分类

💂 个人主页:风间琉璃🤟 版权: 本文由【风间琉璃】原创、在CSDN首发、需要转载请联系博主💬 如果文章对你有帮助、欢迎关注、点赞、收藏(一键三连)和订阅专栏哦 目录 前言 一、ResNet网络结构 1.residual结构 2.BN(Batch Normalization)层…

反射知识点学习

文章目录 1. Java 反射机制原理示意图1.1 反射相关的主要类1.2 反射的优点和缺点1.3 反射调用优化-关闭访问检查 2. Class 类2.1 基本介绍2.2 Class类的常用方法2.3 获取 Class 类对象 3. 哪些类型有 Class 对象4. 类加载4.1 基本说明4.2 类加载时机4.3 类加载过程图4.4 类加载…

国庆作业1

使用消息队列实现进程之间的通信 代码 write.c #include <myhead.h> //消息结构体 typedef struct {long msgtype; //消息类型char data[1024]; //消息正文 }Msg_ds;#define SIZE sizeof(Msg_ds)-sizeof(long) //正文大小 int main(int argc, cons…

算法-位运算-只出现一次的数字 II

算法-位运算-只出现一次的数字 II 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/bitwise-and-of-numbers-range/description/?envTypestudy-plan-v2&envIdtop-interview-150 1.2 题目描述 2 逐个按位与运算 2.1 思路 最简单的就是直接挨个做与运算&#x…

transformers简介

目录 1、前言 2、网络结构 &#xff08;1&#xff09;、Transformers的总体架构可以分为四部分 &#xff08;2&#xff09;、输入文本包含 &#xff08;3&#xff09;、输出部分包含 &#xff08;4&#xff09;、编码器部分 &#xff08;5&#xff09;、解码器部分 1、前…

dbeaver连接国产数据库

dbeaver是常用的数据库连接工具。但是在连接一些国产的数据库时&#xff0c;因为没有可选的驱动&#xff0c;所以需要我们先设置驱动&#xff0c;在连接。以下是一个连接highgo例子。 首先先新增一个驱动&#xff1a; 在页面的菜单栏&#xff0c;选择 数据库 ->驱动管理器…

SpringBoot整合阿里云OSS文件存储解决方案

&#x1f9d1;‍&#x1f4bb;作者名称&#xff1a;DaenCode &#x1f3a4;作者简介&#xff1a;啥技术都喜欢捣鼓捣鼓&#xff0c;喜欢分享技术、经验、生活。 &#x1f60e;人生感悟&#xff1a;尝尽人生百味&#xff0c;方知世间冷暖。 &#x1f4d6;所属专栏&#xff1a;Sp…

【AI视野·今日Sound 声学论文速览 第十五期】Fri, 29 Sep 2023

AI视野今日CS.Sound 声学论文速览 Fri, 29 Sep 2023 Totally 1 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Sound Papers Audio-Visual Speaker Verification via Joint Cross-Attention Authors R. Gnana Praveen, Jahangir Alam使用语音信号进行了说话人验证的…

Web开发-新建Spring Boot项目

目录 Spring Boot 与 Web开发Spring Boot 与 MavenJava 环境搭建下载JDK下载xmapp下载navicat for mysql下载Eclipse配置tomcat配置maven 新建Spring Boot项目 Spring Boot 与 Web开发 Spring Boot 是一种用于简化 Spring 应用程序开发、部署和运行的框架&#xff0c;而 Web 开…

【LeetCode】滑动窗口妙解无重复字符的最长子串

Problem: 3. 无重复字符的最长子串 文章目录 思路算法原理分析暴力枚举 哈希表滑动窗口 复杂度Code 思路 首先我们来分析一下本题的思路 如果读者有看过 长度最小的子数组 的话就可以清楚这个子串其实和子数组是一个道理&#xff0c;都是 连续的一段区间但是呢它们本质上还是存…

【数据结构】队列和栈

大家中秋节快乐&#xff0c;玩了好几天没有学习&#xff0c;今天分享的是栈以及队列的相关知识&#xff0c;以及栈和队列相关的面试题 1.栈 1.1栈的概念及结构 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作…