clustMD r语言_R语言聚类分析-层次聚类分析

本文详细介绍了R语言中进行层次聚类分析的步骤,包括选择变量、缩放数据、计算距离、选择聚类算法等,并以平均联动聚类为例,展示了如何使用hclust函数进行操作。同时,通过 NbClust 函数确定了最佳聚类数目,并展示了如何获取和解析最终的聚类方案。
摘要由CSDN通过智能技术生成

聚类分析的一般步骤:

1.选择合适的变量

2.缩放数据

3.寻找异常点

4.计算距离

5.选择聚类算法

6.获得一种或多种聚类方法

7.确定聚类数目

8.获得最终的聚类解决方案

9.结果可视化

10.解读类

11.验证结果

下面正式开始层次聚类的讲解:

在层次聚类中,起初每一个实例或观测值属于一类,聚类就是每一次把两类聚成新的一类,直到所有的类聚成单个类为止。

(1)定义每个观测值(行或单元)为一类

(2)计算每类和其他各类的距离

(3)把距离最短的两类和并成一类,这样的类的个数就减少一个:

(4)重复步骤(2)(3)

在层次聚类分析中,主要的区别是它们对类的定义不同,下面给出五种常见的聚类方法的定义和其中两类之间距离的定义。

单联动(single)最短距离法:一个类中的点和另一个类中的点的最小距离

全联动(complete):一个类中的点和另一个类中的点的最大距离

平均联动(average):​一个类中的点和另一个类中的点的平均距离

质心(centroid):两类中质心(变量均值向量)之间的距离,对单个观测值来说质心就是变量的值

ward法:两个类之间所有变量的方差分析的平方和

​层次分析法用函数hclust()函数来实现,格式是:hclust(d,method="")

d:是dist()函数计算出的距离矩阵

method:方法:"single"

"complete"​

"average"  "centroid"

"ward"

平均联动聚类:

代码:

data(nutrient,package = "flexclust")

>

row.names(nutrient)

>

nutrient.scale

> d

> fit.average

"average")

> plot(fit.average,hang = -1,cex=.8)

如果最终目标是分配到的类较少,我们需要分析聚类的个数

NbClust()函数可以计算适当类的数目

代码:

library(NbClust)

devAskNewPage(ask = TRUE)

nc

"euclidean",min.nc = 2,max.nc = 15,method = "average")

table(nc$Best.nc[1,])​

0  1

2  3  4

5  9 10 13 14

15

2  1

4  4  2

4  1  1

2  1

4

barplot(table(nc$Best.nc[1,]))

可以看出类的数目为:2,3,5,15最佳

获得最终的聚类方案:

代码:​

barplot(nc$Best.nc)

>

clusters

> table(clusters)

clusters

1

2  3  4

5

7 16

1  2

1

>

aggregate(nutrient,by=list(clusters),median)

Group.1 energy protein fat calcium

iron

1

1  340.0

19

29

9 2.50

2

2  170.0

20

8

13 1.45

3

3  160.0

26

5

14 5.90

4

4   57.5

9

1

78 5.70

5

5  180.0

22

9     367

2.50

>

aggregate(as.data.frame(nutrient.sacle),by=list(cluster=clusters),median)

cluster

energy

protein

fat

calcium

iron

1

1  1.3101024

0.0000000  1.3785620 -0.4480464

0.08110456

2

2 -0.3696099

0.2352002 -0.4869384 -0.3967868

-0.63743114

3

3 -0.4684165

1.6464016 -0.7534384 -0.3839719

2.40779157

4

4 -1.4811842 -2.3520023

-1.1087718  0.4361807

2.27092763

5

5 -0.2708033

0.7056007 -0.3981050  4.1396825

0.08110456

> plot(fit.average,hang = -1,cex=.8)

>

rect.hclust(fit.average,k=5)

​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值