vlambda博客
学习文章列表

【R语言】| 聚类分析(二)

点击上方“蓝字”带你去看小星星
【R语言】| 聚类分析(二)

聚类就是按照某个特定标准(如距离准则)把一个数据集分割成不同的类,使得同一个类的数据对象的相似性尽可能大,同时使不同类中的数据对象的差异性也尽可能地大。即聚类后同一类的数据尽可能聚集到一起,不同类的数据尽量分离。

【R语言】| 聚类分析(二)

3. 系统(层次)聚类法

系统(层次)聚类法的基本思想是:开始将n个样品各自作为一类,并规定样品之间的距离【1】,然后将距离最近的两类合并成一个新类,计算新类与其他类的距离2】,重复进行两个最近类的合并,每次减少一类直至所有的样品合并为一类。


【1】

r语言中使用dist(x, method = "euclidean",diag = FALSE, upper = FALSE, p = 2) 来计算距离。其中x是样本矩阵或者数据框。method表示计算哪种距离,method的取值有:

euclidean

欧几里德距离,简称欧氏距离

maximum

切比雪夫距离

manhattan

绝对值距离

canberra

兰氏距离

minkowski

明考夫斯基距离,使用时要指定p值

binary

定性变量距离


注:定性变量距离

样品

性别

外语

职业

英语

日语

法语

教师

学生

X1

1

0

1

0

0

1

0

X2

0

1

1

0

0

0

1

M0: 0:0的配对数,M1: 1:1的配对数, M2:不配对数

★上例中,M0=2,M1=1,M2=4,样本X1与X2之间的距离为D=M2/M1+M2=4/1+4=4/5=0.8


★diag是逻辑变量,当diag = TRUE时,给出对角线上的距离。

★upper是逻辑变量,当upper = TRUE时,给出上三角矩阵的值(缺省值仅给出下三角矩阵的值)。

★p:为minkowski距离的幂次


【2】

r语言中使用hclust(d, method = "complete", members=NULL) 来进行层次聚类。其中d为距离矩阵。

method表示类的合并方法,有:

single

最短距离法

complete

最长距离法

median

中间距离法

mcquitty

相似法

average

类平均法

centroid

重心法

ward

离差平方和法


【R语言】| 聚类分析(二)

图中两圆表示两类,包含样本点1,2,3的记为类A,包含样本点4,5的记为类B。

可以计算出六个距离(采用欧氏距离or马氏距离or ......):d14 , d15, d24, d25, d34, d35

采用最短距离法表示类A与类B距离:d24

采用最长距离法表示类A与类B距离:d15

其他方法(重心法、离差平方和法......)计算规则点击阅读原文


★代码实现:

#single linkage(单链接法=最短距离法)#complete linkage(完全链接法=最长距离法)#average linkage(平均链接法)#Ward's method(离差平方和)fit_hc=hclust(dist(new_iris),method="complete")print(fit_hc)plot(fit_hc,hang=-1,cex=0.5)#hang=-1可以使x轴的标记在y=-1的位置显示 #cex调整标记大小rect.hclust(fit_hc,k=3,border="red")



【R语言】| 聚类分析(二)

图1  系统聚类法




【R语言】| 聚类分析(二)


wode

4. 密度聚类法

#DBSCAN从样本中找出高密度和低密度区完成聚类,需要设定半径和阈值(minpoints)

#核心点(core points):周围点的个数大于阈值;

#边缘点(border points):不是核心点,但落在某个核心点的邻域(eps)内

#噪声点(noise point):组成了低密度区,并包围着高密度区域


★代码实现:

library(ggplot2)set.seed(665544)x1<-seq(0,pi,length.out=100)y1<-sin(x1)+0.1*rnorm(100)x2<-1.5+seq(0,pi,length.out=100)y2<-cos(x2)+0.1*rnorm(100)data<-data.frame(c(x1,x2),c(y1,y2))names(data)<-c('x','y')qplot(data$x,data$y)#画出正余弦散点图

【R语言】| 聚类分析(二)

图2  正余弦散点图


代码实现:

#密度聚类p<-ggplot(data,aes(x,y))install.packages("fpc")library(fpc)model<-dbscan(data,eps=0.6,MinPts=4)p+geom_point(size=2.5,aes(colour=factor(model$cluster)))+theme(legend.position='bottom')#K均值聚类model2<-kmeans(data,centers=2,nstart=10)p+geom_point(size=2.5,aes(colour=factor(model2$cluster)))+theme(legend.position='bottom')


【R语言】| 聚类分析(二)

图3  密度聚类图


图4  k-means聚类图


链接:https://pan.baidu.com/s/1r_IRN0AsgpGrczN4c-_gfg

提取码:0wvp

“阅读原文”一起来充电吧!