基于R语言做层次聚类分析

聚类分析法(Cluster Analysis) 是在多元统计分析中研究如何对样品(或指标)进行分类的一种统计方法,它直接比较各事物之间的性质,将性质相近的归为一类,将性质差别较大的归入不同的类。
聚类分析主要分为层次聚类,划分聚类和密度聚类。层次聚类方法(Hierarchical Clustering)就是通过对数据集按照某种方法进行层次分解,直到满足某种条件为止。原理就不多说了,我们今天主要来说下怎么使用R语言进行层次聚类分析,使用一个肉类数据,主要说的是27种肉类的营养数据,我们对它进行一个大致的分类,除此之外还需要NbClust、factoextra、igraph包,需先安装好。
我们先导入数据看一下

bc<-read.csv("E:/r/test/roulei.csv",sep=',',header=TRUE)
names(bc)

在这里插入图片描述
数据有5个参数,energy代表食物能量(卡路里),protein蛋白质,fat脂肪,calcium钙含量,iron铁含量,竖排是各种肉的名字,我就不一一解释了。
数据的变量差别很大,我们首先要把数据标准化,这样才有利于比较

bc.scaled<-scale(bc)##标准化数据

在这里插入图片描述
有了标准化数据我们就可以计算欧氏距离

d<-dist(bc.scaled)###计算欧氏距离

计算欧氏距离后我们就可以使用hclust函数进行层次聚类分析了

fit1<-hclust(d,method = "average")
plot(fit1,hang = -1,cex=.8,main = "title")

在这里插入图片描述
也可以使用热图的形式来表示

heatmap(as.matrix(d))

在这里插入图片描述
聚类分析中,聚类个数是比较重要的指标,我们可以使用NbClust包来进行投票

devAskNewPage(ask = T)
nc<-NbClust(bc.scaled,distance = "euclidean",min.nc = 2,max.nc = 15,
            method = "average")
table(nc$Best.n[1,])
barplot(table(nc$Best.n[1,]),xlab = "No. of cluster")

在这里插入图片描述
在这里插入图片描述
如上图所示分成4类有4个投票,2类有3个投票,结合上面两个图形,我们觉得分成4类是比较理想的。
得出了聚类的个数,我们可以使用factoextra,igraph包对它进行美化,首先画一张基础的分类图

library(factoextra)
library(igraph)
fviz_dend(fit1)

在这里插入图片描述
把它进行美化一下

fviz_dend(fit1,k=4,rect =T,rect_fill = T,
          rect_border = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"))##K为聚类个数,rect_border为区域颜色填充

在这里插入图片描述
添加语法horiz = TRUE可以把它变成横向

fviz_dend(fit1,k=4,rect =T,rect_fill = T,horiz = TRUE,
          rect_border = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"))

在这里插入图片描述
添加type = "circular"可以把它变成圆形的,好像最近很流行这种圆形的视图

fviz_dend(fit1,k=4,rect =T,rect_fill = T,type = "circular",
          rect_border = c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"))

在这里插入图片描述
把type = "phylogenic"可以改成类似神经网络的视图

fviz_dend(fit1,k=4,rect =T,rect_fill = T,type ="phylogenic",
          rect_border =c("#2E9FDF", "#00AFBB", "#E7B800", "#FC4E07"))

在这里插入图片描述
更多精彩文章请关注公众号:零基础说科研
在这里插入图片描述

在R语言中进行层次聚类分析(Hierarchical Clustering),首先你需要找到一个合适的数据集。这通常可以从公开的数据源如UCI Machine Learning Repository、Kaggle或者其他在线数据库获取,也可以是你自己收集的数据。推荐选择数值型变量较多并且有明确分类目标的数据集。 步骤如下: 1. 导入数据:使用`read.csv()`或`read.table()`等函数加载数据集到R环境中,比如假设你的数据集叫"data.csv": ```R data <- read.csv("data.csv", header = TRUE) ``` 2. 数据预处理:确保数据清洗无缺失值,并对需要的数值特征进行标准化或归一化,以便于聚类算法的计算。可以使用`scale()`函数来进行标准化处理。 3. 应用层次聚类:R中有几个内置函数可以进行层次聚类,例如`hclust()`。这里以 ward.D 或 ward.D2 方法为例(都是基于距离的聚类方法): ```R dist_matrix <- dist(data[, select_numeric_columns]) # 计算距离矩阵,select_numeric_columns是只包含数值列的子集 hc <- hclust(dist_matrix, method = "ward.D") # 创建hclust对象 ``` 4. 可视化结果:使用`plot()`函数创建 dendrogram(树状图)来可视化聚类过程和结果: ```R plot(hc, labels = rownames(data), hang = -1) # 挂标签,hang=-1让树枝更向下显示 ``` 5. 划分簇:可以根据树状图的分支点来决定簇的数量。常见的划分方法有“剪枝”(cutree()): ```R cluster_labels <- cutree(hc, k = desired_num_clusters) # desired_num_clusters是你想要的簇数 ```
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天桥下的卖艺者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值