层次聚类分析

1、python语言

from scipy.cluster import hierarchy # 导入层次聚类算法
import matplotlib.pylab as plt
import numpy as np# 生成示例数据
np.random.seed(0)
data = np.random.random((20,1))# 使用树状图找到最佳聚类数
Z = hierarchy.linkage(data,method='weighted',metric='euclidean')
re = hierarchy.dendrogram(Z,color_threshold=0.2,above_threshold_color='#bcbddc')# 输出节点标签
print(re["ivl"])# 画图
plt.title('Dendrogram') # 标题
plt.xlabel('Customers') # 横标签
plt.ylabel('Euclidean distances') # 纵标签
plt.show()

dendrogram函数参数:

Z:层次聚类的结果,即通过scipy.cluster.hierarchy.linkage()函数计算得到的链接矩阵。
p:要显示的截取高度(y轴的阈值),可以用于确定划分群集的横线位置。
truncate_mode:指定截取模式。默认为None,表示不截取,可以选择 'lastp' 或 'mlab' 来截取显示。
labels:数据点的标签,以列表形式提供。
leaf_font_size:叶节点的字体大小。
leaf_rotation:叶节点的旋转角度。
show_leaf_counts:是否显示叶节点的数量。
show_contracted:是否显示合并的群集。
color_threshold:显示不同颜色的阈值,用于将不同群集算法聚类为不同颜色。
above_threshold_color:超过阈值的线段颜色。
orientation:图形的方向,可以选择 'top'、'bottom'、'left' 或 'right'。

假设我们输出Z值,获得以下结果:

from scipy.cluster import hierarchy # 导入层次聚类算法
import numpy as np
import pandas as pd# 生成示例数据
np.random.seed(0)
data = np.random.random((8,1))# 使用树状图找到最佳聚类数
Z = hierarchy.linkage(data,method='weighted',metric='euclidean')
row_dist_linkage = pd.DataFrame(Z,columns=['Row Label 1','Row Label 2','Distance','Item Number in Cluster'],index=['Cluster %d' % (i+1) for i in range(Z.shape[0])])
print("\nData Distance via Linkage: \n",row_dist_linkage)

其中,第一列和第二列代表节点标签,包含叶子和枝子;第三列代表叶叶(或叶枝,枝枝)之间的距离;第四列代表该层次类中含有的样本数(记录数)。注:因此,我们可以第三列距离结合图来确定不同簇的样本数量。这里的数量为(n-1),即样本总数减1。

2、R语言

数据:iris.zip

setwd("D:/Desktop/0000/R") #更改路径df <- read.csv("iris.csv",header = T, row.names = 1) #读取工作路径文件
head(df) #查看前6行
hc <- hclust(dist(df))library(ggtree)ggtree(hc,layout="circular",branch.length = "daylight")+xlim(NA,3)+geom_tiplab2(offset=0.1,size=2)+#geom_text(aes(label=node))+geom_highlight(node = 152,fill="red")+geom_highlight(node=154,fill="steelblue")+geom_highlight(node=155,fill="green")+geom_cladelabel(node=152,label="virginica",offset=1.2,barsize = 2,vjust=-0.5,color="red")+geom_cladelabel(node=154,label="versicolor",offset=1.2,barsize = 2,hjust=1.2,color="steelblue")+geom_cladelabel(node=155,label="setosa",offset=1.2,barsize = 2,hjust=-1,color="green")

如果没有安装ggtree则先安装

install.packages("BiocManager")
BiocManager::install('ggtree')当然,我们可以指定版本安装:BiocManager::install('ggtree',version = "3.17")

对上面代码在修改下:

setwd("D:/Desktop/0000/R") #更改路径df <- read.csv("iris.csv",header = T, row.names = 1) #读取工作路径文件
head(df) #查看前6行
hc <- hclust(dist(df))library(ggtree)
help(package="ggtree")
ggtree(hc,layout="circular",branch.length=5,size = 0.5)+ #size = 0.5 线宽xlim(NA,3)+#theme_tree2()+ #显示x坐标范围geom_tiplab2(size=3,align=T,linesize = -0.0,linetype = 0,offset = 0.0001)+ #size = 3 标签大小#align=T 标签右对齐 linesize = 16 标签右对齐后会有线连接,#设置线的粗细 linetype = 1 设置线的类型,默认是虚线 offset=2设置标签距离枝末端的距离#geom_text(aes(label=node))+geom_highlight(node = 152,fill="red",#extendto = 0.05, #延长#extend =-0, #反向延长#alpha = 0.2)+geom_highlight(node=154,fill="steelblue")+geom_highlight(node=155,fill="green")+geom_cladelabel(node=152,label="virginica",offset=1.5,barsize = 2,vjust=-0.8,hjust=0.5,color="red")+geom_cladelabel(node=154,label="versicolor",offset=1.5,barsize = 2,hjust=1.2,color="steelblue")+geom_cladelabel(node=155,label="setosa",offset=1.5,barsize = 2,hjust=-1,vjust=-1,color="green")#+# #另外一种分类条带的方法# geom_strip(51,#起点,设置的是外节点#            114,#终点#            label= "cluster 2", #分类标签名#            offset= 1.5, #条带的偏移量#            offset.text = 3, #标签的偏移量#            barsize= 2, #条带宽度#            #extend= 0.2, #延长条带的长度(两端)#            color= "#9467BDFF", #条带颜色#            angle= 90,#标签旋转角度#            hjust= "center"# )

又或者:

setwd("D:/Desktop/0000/R") #更改路径df <- read.csv("iris.csv",header = T, row.names = 1) #读取工作路径文件
head(df) #查看前6行
hc <- hclust(dist(df))library(ggtree)
help(package="ggtree")
ggtree(hc,layout="circular",branch.length=5,size = 0.5)+ #size = 0.5 线宽xlim(NA,3)+#theme_tree2()+ #显示x坐标范围geom_tiplab2(size=2,align=T,linesize = -0.0,linetype = 0,offset = 0.2)+ #size = 3 标签大小#align=T 标签右对齐 linesize = 16 标签右对齐后会有线连接,#设置线的粗细 linetype = 1 设置线的类型,默认是虚线 offset=2设置标签距离枝末端的距离#geom_text(aes(label=node))+geom_cladelab(node=152,label="",barcolor="red",barsize = 5,extend=0.5,offset=0.6,alpha = 0.5)+geom_cladelab(node=154,label="",barcolor="steelblue",barsize = 5,extend=0.5,offset=0.7,alpha = 0.5)+geom_cladelab(node=155,label="",barcolor="green",barsize = 5,extend=0.5,offset=0.6,alpha = 0.5)

除了上面这种方式外,我们还可以使用下面的方式获取(节点对齐):

setwd("D:/Desktop/0000/R") #更改路径
library(dendextend) #install.packages("dendextend")
library(circlize) #install.packages("circlize")df <- read.csv("iris.csv",header = T, row.names = 1) #读取工作路径文件
head(df) #查看前6行
aa <- hclust(dist(df))# 设置画布大小为4英寸宽,4英寸高
par(mar = c(4, 4, 2, 2) + 0.1)
png("output.png", width = 4, height = 4, units = "in", res = 600)hc <- as.dendrogram(aa) %>%set("branches_lwd", c(1.5)) %>% # 线条粗细set("labels_cex", c(.9)) # 字体大小# 颜色
hc <- hc %>%color_branches(k = 10) %>%  #树状分支线条颜色color_labels(k = 10)         #文字标签颜色# Fan tree plot with colored labels
circlize_dendrogram(hc,labels_track_height = NA,dend_track_height = 0.7)
# 结束绘图并关闭设备
dev.off()

文件数据样式:

更多学习视频:【R包使用】ggtree美化树状图_哔哩哔哩_bilibili、树状图展示聚类分析的结果_哔哩哔哩_bilibili

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

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

相关文章

千呼万唤openGauss资源池化系列培训来了

应openGauss广大用户要求&#xff0c;社区于近期推出openGauss资源池化培训系列。 关于资源池化 资源池化是openGauss 5.0.0 推出的重点特性&#xff0c;是openGauss基于内存池化和共享存储实现的数据库集群。数据在集群的计算节点内存、共享存储中实现共享。应用可以任意节点…

uni-app 之 解决u-button始终居中问题

uView中u-button始终居中问题如何解决的简单方法&#xff1f; 1&#xff1a;给该元素margin-right: 0;可以达到向右靠齐&#xff1b; 2&#xff1a;给该元素的父元素设置float: right image.png <u-button style"width: 50px; margin-left: 0;" plain"t…

DAQ高频量化平台:引领Ai高频量化交易模式变革

近年来&#xff0c;数字货币投资市场掀起了一股热潮&#xff0c;以&#xff08;BTC&#xff09;为代表的区块链技术带来了巨大的商业变革。数字资产的特点&#xff0c;如无国界、无阶级、无门槛、高流动性和高透明度&#xff0c;吸引了越来越多的人们的关注和认可&#xff0c;创…

Dubbo3应用开发—XML形式的Dubbo应用开发和SpringBoot整合Dubbo开发

Dubbo3程序的初步开发 Dubbo3升级的核心内容 易⽤性 开箱即⽤&#xff0c;易⽤性⾼&#xff0c;如 Java 版本的⾯向接⼝代理特性能实现本地透明调⽤功能丰富&#xff0c;基于原⽣库或轻量扩展即可实现绝⼤多数的 微服务治理能⼒。更加完善了多语言支持&#xff08;GO PYTHON R…

指针笔试题讲解(让指针变得简单易懂)

数组名的理解 : 数组名就是首元素地址 但是有两个例外&#xff1a; 1. sizeof&#xff08;数组名&#xff09;这里的数组名表示整个数组的大小&#xff0c;sizeof&#xff08;数组名&#xff09;计算的是整个数组的大小&#xff0c;单位是字节 2. &数组名 这里的数组…

【音视频】ffplay源码解析-PacketQueue队列

包队列架构位置 对应结构体源码 MyAVPacketList typedef struct MyAVPacketList {AVPacket pkt; //解封装后的数据struct MyAVPacketList *next; //下一个节点int serial; //播放序列 } MyAVPacketList;PacketQueue typedef struct PacketQueue {MyAVPacketList …

安防监控系统/视频云存储/监控平台EasyCVR服务器解释器出现变更该如何修改?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

python excel复制数据保留单元格格式(.xls.xlsx)

最近帮朋友开发一个数据excel根据条件动态过率的功能.读取生成用pandas很方便,但是这里有一点比较麻烦的是得保留原来的单元格格式.这点操作起来就要麻烦一点了.下面总结了.xlsx和.xls处理 1.xlsx 文件处理 xlsx文件处理可以使用openpyxl库进行处理,比较简单,流程如下 1.获取…

[hive]搭建hive3.1.2hiveserver2高可用可hive metastore高可用

参考: Apache hive 3.1.2从单机到高可用部署 HiveServer2高可用 Metastore高可用 hive on spark hiveserver2 web UI 高可用集群启动脚本_薛定谔的猫不吃猫粮的博客-CSDN博客 没用里头的hive on spark,测试后发现版本冲突 一、Hive 集群规划(蓝色部分) ck1ck2ck3Secondary…

【虚幻引擎】UE5 VLC接入网络监控、视频直播、网络直播支持RTSP、RTMP

一、如何更新自己的插件匹配自己想要的UE版本 我们在网上下载的插件一般是UE4版本的插件&#xff0c;这个时候就需要我们自己去修改编译&#xff0c;接下来教大家修改插件来适配自己的引擎。 如果不想自己编译代码&#xff0c;可以直接找我拿编译好的UE5.0、UE5.1、UE5.2的插件…

学习路之PHP--laravel postman 提交表单出现419错误

问题图片 解决&#xff1a; 白名单 有时候你可能希望设置一组不需要 CSRF 保护的 URL 。例如&#xff0c;如果你正在使用 Stripe 处理付款并使用了他们的 webhook 系统&#xff0c;你会需要从 CSRF 的保护中排除 Stripe webhook 处理程序路由&#xff0c;因为 Stripe 不知道要发…

swift 天气

定义不同模式主题 自定义颜色 输入框 委托和协议 扩展 协议 http 请求 调用api 闭包

记录crack某IDE插件过程

声明&#xff1a;本文仅记录学习过程&#xff0c;已对关键位置脱敏处理&#xff0c;未提供任何工具&#xff0c;请支持正版。 反编译jar包 使用cfr进行对插件核心jar包MyBxxxxxx-obfuss.jar进行反编译&#xff0c;在本地生成a.txt。 java -jar cfr-0.152.jar MyBxxxx-obfuss.…

用flask框架flask-sock和websocket创建一个自己的聊天界面

WebSocket 协议在10年前就已经标准化了(在2011年&#xff0c;你能相信吗?)所以我相信你不需要介绍。但是如果你不熟悉它&#xff0c;WebSocket 是 HTTP 协议的一个扩展&#xff0c;它在客户端和服务器之间提供了一个永久的、双向的通信通道&#xff0c;在这里双方可以实时地发…

Hugging Face使用Stable diffusion Diffusers Transformers Accelerate Pipelines VAE

Diffusers A library that offers an implementation of various diffusion models, including text-to-image models. 提供不同扩散模型的实现的库&#xff0c;代码上最简洁&#xff0c;国内的问题是 huggingface 需要翻墙。 Transformers A Hugging Face library that pr…

怎么将几张图片做成pdf合在一起

怎么将几张图片做成pdf合在一起&#xff1f;在我们平时的工作中&#xff0c;图片和pdf都是非常重要的电脑文件&#xff0c;使用也非常频繁&#xff0c;图片能够更为直观的展示内容&#xff0c;而pdf则更加的正规&#xff0c;很多重要文件大多会做成pdf格式的。在职场人的日常工…

C# OpenCvSharp 图片模糊检测(拉普拉斯算子)

效果 项目 代码 using OpenCvSharp; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Windows.Forms.VisualStyl…

java CAS详解(深入源码剖析)

CAS是什么 CAS是compare and swap的缩写&#xff0c;即我们所说的比较交换。该操作的作用就是保证数据一致性、操作原子性。 cas是一种基于锁的操作&#xff0c;而且是乐观锁。在java中锁分为乐观锁和悲观锁。悲观锁是将资源锁住&#xff0c;等之前获得锁的线程释放锁之后&am…

React 全栈体系(九)

第五章 React 路由 一、相关理解 1. SPA 的理解 单页 Web 应用&#xff08;single page web application&#xff0c;SPA&#xff09;。整个应用只有一个完整的页面。点击页面中的链接不会刷新页面&#xff0c;只会做页面的局部更新。数据都需要通过 ajax 请求获取, 并在前端…

el-select 下拉框全选、多选的几种方式组件

组件一、基础多选 适用性较广的基础多选&#xff0c;用 Tag 展示已选项 <template><el-select v-model"value1" multiple placeholder"请选择"><el-optionv-for"item in options":key"item.value":label"item.la…