聚类层次【python,机器学习,算法】

层次聚类算法(Hierarchical Clustering Algorithm)是一种常用的无监督学习算法,用于将数据集划分成多个不同层次的簇。与K均值聚类不同,层次聚类不需要预先指定聚类数量,而是通过计算样本之间的相似度或距离来构建一个层次结构。

聚集层次算法有两种方式:

  1. 自下而上的合并(Agglomerate),其主要步骤如下:

    • 将每个数据点视为单个群集。因此,开始时我们将拥有 n 个群集。开始时,数据点的数量也将为 n。
    • 计算 n 个集群之间的距离,计算距离的方法通常有以下几种:
      1. 对于两个集群,取集群之间距离最近的两个样本点作为集群的距离。
      2. 对于两个集群,取集群之间距离最远的两个样本点作为集群的距离。
      3. 对于两个集群,分别计算两个集群内样本点的平均距离,然后计算这两个平均距离之间的距离。
    • 找出距离最近的两个集群,进行合并。
    • 通过以上三步,可以将样本点聚集想要的 K 个集群。
      下面是一个该算法的 Python 实现:
    import matplotlib.pyplot as plt
    import numpy as np# 设置了随机数种子,让随机数生成变得可重复,即在设置过后,每次运行代码得到的随机数都是一样的。
    np.random.seed(0)cluster1 = np.random.randn(30, 2) + np.array([0, 7])
    cluster2 = np.random.randn(30, 2) + np.array([8, 0])
    cluster3 = np.random.randn(30, 2) + np.array([8, 8])
    # 用于沿着垂直方向(行方向)堆叠数组,得到一个总的数据集
    data = np.vstack([cluster1, cluster2, cluster3])# 1. 初始化每个数据点为一个独立的簇
    def initialize_clusters(data):return [[point] for point in data]# 2. 计算簇中心之间的距离
    def compute_distances(clusters):distances = np.zeros((len(clusters), len(clusters)))for i in range(len(clusters)):for j in range(len(clusters)):if i != j:# 使用欧式距离计算两个簇的距离distances[i][j] = np.sqrt(sum((np.mean(clusters[i],axis=0) - np.mean(clusters[j], axis=0)) ** 2))return distances# 找距离最近的两个簇
    def find_closest_clusters(distances):min_distance = np.inf# 用于保存最近两个簇对应的索引closest_clusters = Nonefor i in range(len(distances)):for j in range(len(distances)):if i != j and distances[i][j] < min_distance:min_distance = distances[i][j]closest_clusters = i, jreturn closest_clusters# 3. 合并最近的两个簇为一个新的簇,并更新簇中心点
    def merge_clusters(clusters, closest_clusters):i, j = closest_clustersmerged_cluster = clusters[i] + clusters[j]  # 将最近的两个簇更新为一个簇new_clusters = [cluster for idx, cluster in enumerate(clusters) ifidx not in (i, j)]# 这里将没有合并的簇放进新的簇列表里面new_clusters.append(merged_cluster)return new_clustersdef hierarchical_clustering(data, k):# 初始化每个数据点为一个独立的簇clusters = initialize_clusters(data)# 开始迭代合并最相似的簇while len(clusters) > k:# 计算簇中心之间的距离,并找到最近的两个簇distances = compute_distances(clusters)closest_clusters = find_closest_clusters(distances)# 合并最近的两个簇为一个新的簇,并更新簇中心点clusters = merge_clusters(clusters, closest_clusters)return clusters# 执行层次聚类算法
    k = 4
    clusters = hierarchical_clustering(data, k)# 打印聚类结果
    for idx, cluster in enumerate(clusters):print(f"Cluster {idx + 1}: ", cluster)# 绘制聚类结果的图表
    plt.figure(figsize=(8, 6))
    colors = ["red", "green", "blue", "yellow"]for i in range(k):for p in clusters[i]:plt.scatter(x=p[0], y=p[1], color=colors[i])plt.xlabel("X")
    plt.ylabel("Y")
    plt.title("Hierarchical Clustering")
    plt.show()
    
  2. 自上而下的分解(Divisive)。

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

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

相关文章

Linux性能优化实战

Linux性能优化实战 33 | 关于 Linux 网络&#xff0c;你必须知道这些&#xff08;上&#xff09;如何提高系统并发&#xff1f;&#xff08;8条&#xff09;如何理解分布式&#xff1f;如何理解云计算&#xff1f;如何理解微服务&#xff1f;TCP/IP 网络栈如何分层&#xff1f;…

前端 JS 经典:打印对象的 bug

1. 问题 相信这个 console 打印语句的 bug&#xff0c;其实小伙伴们是遇到过的&#xff0c;就是你有一个对象&#xff0c;通过 console&#xff0c;打印一次&#xff0c;然后经过一些处理&#xff0c;再通过 console 打印&#xff0c;发现两次打印的结果是一样的&#xff0c;第…

SSM整合总结

一.核心问题 (一)两个容器 web容器 web相关组件&#xff08;controller,springmvc核心组件&#xff09; root容器 业务和持久层相关组件&#xff08;service,aop,tx,dataSource,mybatis,mapper等&#xff09; 父容器&#xff1a;root容器&#xff0c;盛放service、mapper、…

Oracle EBS AP发票验证-计税期间出现意外错误解决方法

系统版本 RDBMS : 12.1.0.2.0 Oracle Applications : 12.2.6 问题症状: **打开发票题头或发票行“税详细信息”**错误提示如下: 由于以下原因而无法针对"税"窗口中所做的修改更新 Oraclee Payables信息: 尚未为税率或帐户来源税率设置可退回税/应纳税额帐户。请…

Java和Web前端哪个有发展前景?

Java和Web前端都是当今技术行业里的热门岗位&#xff0c;岗位招聘需求量大&#xff0c;人才竞争度高&#xff0c;同学们掌握这两个岗位里其中任何一个的相关主流技术&#xff0c;都可以找到一份不错的职位。下面请允许笔者做一个简要的分析阐述&#xff1a; 一、Web前端 Web前…

C语言过度C++语法补充(面向对象之前语法)

目录 1. C相较于C语言新增的语法 0. C 中的输入输出 1. 命名空间 1. 我们如何定义一个命名空间&#xff1f; 2. 如何使用一个命名空间 3. 命名空间中可以定义什么&#xff1f; 4. 在 相同或者不同 的文件中如果出现 同名的命名空间 会如何&#xff1f; 5. 总结~~撒花~~…

网络空间安全数学基础·多项式环与有限域

5.1 多项式环&#xff08;掌握&#xff09; 5.2 多项式剩余类环&#xff08;理解&#xff09; 5.3 有限域&#xff08;熟练&#xff09; 5.1 多项式环 定义&#xff1a;设F是一个域&#xff0c;称是F上的一元多项式&#xff0e; 首项&#xff1a;如果an≠0&#xff0c;则称 a…

最全的NVM、Node.js、NPM、NRM安装教程

介绍 本文将会全面的介绍Node.js全家桶的安装,内容包括:NVM安装,Node.js安装,NPM安装,NRM安装。 下面简单介绍下我们准备安装的都是什么东东: 一、Node.js: Node.js 是运行在服务端的 JavaScript,是一个基于Chrome JavaScript 运行时建立的一个平台。简单说,Node.js是J…

BGP有条件打破IBGP水平分割1

接BGP汇总认证 1、BGP聚合 不是BGP自带的聚合配置&#xff0c;而是使用BGP的人&#xff0c;利用了BGP的配置原理设计一套配置极简的汇总命令&#xff1b; BGP的宣告特点: 本地路由表中任何来源产生的路由均可宣告到BGP协议 2、bgp自带的汇总配置 先逐条宣告明细&#xff0c;最后…

CAD二次开发(8)-探索实现不重启CAD进行热部署代码

最近在研究CAD二次开发过程中&#xff0c;调试代码的过程中&#xff0c;需要频繁地重启CAD&#xff0c;非常浪费我们的开发时间&#xff0c;所以我就一直在想&#xff0c;怎么可以实现在不每次重启代码和CAD的情况下&#xff0c;实现代码的热部署效果。 我找到的方式&#xff…

HDFS的块汇报和块放置策略--从一次HDFS写文件故障开始(WIP)

文章目录 前言事故分析&#xff1a;代码解析BlockReport的调度和时机哪些Block会进行FBR或者IBRIBR所选定的BlockFBR所选定的Block 块放置策略详解之在上层寻找机器为文件添加块的基本流程块放置策略&#xff1a;选择机器为每个副本逐个寻找机器在指定范围内随机寻找简单看一下…

本地运行ChatTTS

TTS 是将文字转为语音的模型&#xff0c;最近很火的开源 TTS 项目&#xff0c;本地可以运行&#xff0c;运行环境 M2 Max&#xff0c;差不多每秒钟 4&#xff5e;&#xff5e;5 个字。本文将介绍如何在本地运行 ChatTTS。 下载源码 首先下载源代码 git clone https://github…

一句话说清HDMI ARC eARC功能和区别

HDMI&#xff1a; 高清多媒体接口&#xff0c;主要用于传输高清音视频信号&#xff0c;High Definition Multimedia Interface。 ARC: 音频回传通道&#xff0c;Audio Return Channel eARC: 增强型音频回传通道&#xff0c;第一个E是增强的意思&#xff0c;Enhanced Audio…

【硬件工程师面试宝典】常见面试题其一

1. 什么是 Setup 和 Hold 时间&#xff1f; Setup 时间是指在时钟沿到达之前&#xff0c;数据需要保持稳定的最小时间。这意味着在时钟沿到达之前&#xff0c;数据线上的信号必须已经稳定下来。 Hold 时间是指在时钟沿到达之后&#xff0c;数据需要继续保持稳定的最小时间。这…

给孩子的端午节礼物:最新初中数学思维导图大合集+衡水高考学霸笔记,可下载打印!

大家好哇&#xff01;端午节到了&#xff0c;阿星给家里有孩子的伙伴们一份礼物哦&#xff01;今天给大家带来一个超级实用的学习神器——思维导图法&#xff0c;最新版的初中数学思维导图大合集&#xff01; 这可不是我吹哦&#xff0c;连哈佛、剑桥大学都在用的高级学习方法…

3D打印随形水路:模具水路的革命性技术

在快速发展的模具制造行业中&#xff0c;3D打印技术以其独特的优势正在引领一场技术革命。其中&#xff0c;3D打印随形水路技术&#xff0c;凭借其灵活性和定制化设计的能力&#xff0c;为模具带来了前所未有的变革。 模具3D打印随形水路技术&#xff0c;是一种利用3D打印技术制…

alembic 维护的postgresql的数据库表结构,models做了删除表的列和增加表的列,应该怎么做更新操作

使用 Alembic 进行数据库迁移时&#xff0c;如果你的数据模型&#xff08;通常是 SQLAlchemy 的 ORM 模型&#xff09;有变动&#xff0c;如添加或删除列&#xff0c;你需要创建一个迁移脚本来更新数据库结构。这里是一个基本的步骤说明&#xff0c;如何使用 Alembic 来处理你的…

别人状告你怎么办?你知道还可反告吗?

别人状告你怎么办&#xff1f;你知道还可反告吗&#xff1f; --李秘书讲写作&#xff1a;关于反诉状的写作技巧与策略 反诉状是民事诉讼中的一种重要法律文书&#xff0c;它允许被告在原告提起诉讼后&#xff0c;对原告提起反诉&#xff0c;以抵消原告的诉讼请求。李秘书这节…

分水岭算法分割和霍夫变换识别图像中的硬币

首先解释一下第一种分水岭算法&#xff1a; 一、分水岭算法 分水岭算法是一种基于拓扑学的图像分割技术&#xff0c;广泛应用于图像处理和计算机视觉领域。它将图像视为一个拓扑表面&#xff0c;其中亮度值代表高度。算法的目标是通过模拟雨水从山顶流到山谷的过程&#xff0…

记录使用pytorch训练crnn

工程来源&#xff1a; https://github.com/WenmuZhou/PytorchOCR?tabreadme-ov-file#train 基本数据准备和配置和paddleOCR是一样的&#xff1b;记录一下使用时遇到的问题。 1.环境 我使用的是&#xff1a;172.31.50.201:5000/algorithm/pytorch-1.11.0-cuda11.3-cudnn8-d…