聚类分析(避免不存在的类)

避免不存在的类

聚类分析是一种旨在识别数据集子组的方法,并且在此方面十分擅长。事实上,它甚至能发现不存在的类。

install.packages("fMultivar")

library(fMultivar)

set.seed(1234)

df <- rnorm2d(1000, rho=.5)

df <- as.data.frame(df)

 

结果分析:fMultivar包中的rnorm2d()函数用来从相关系数为0.5的二元正态分布中抽取1000个观测值。所得的曲线显示在上图中。很显然,数据中没有类。

随后,使用wssplot()Nbclust()函数来确定当前聚类的个数:

wssplot(df)

 

library(NbClust)

nc <- NbClust(df, min.nc=2, max.nc=15, method="kmeans")

 

dev.new()

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

 xlab="Number of Clusters", ylab="Number of Criteria",

 main="Number of Clusters Chosen by 26 Criteria")

 

结果分析:使用Nbclust包中的判别准则推荐的二元数据的聚类数据,推荐的类数为2 3

wssplot()函数建议聚类的个数是3,然而NbClust函数返回的准则多数支持2类或3类。如果利用PAM法进行双聚类分析:

library(ggplot2)

library(cluster)

fit <- pam(df, k=2)

df$clustering <- factor(fit$clustering)

ggplot(data=df, aes(x=V1, y=V2, color=clustering, shape=clustering)) +             #图是采用串联起来(+)号函数创建的

           geom_point() + ggtitle("Clustering of Bivariate Normal Data")

 

结果分析:对于二元数据的PAM聚类分析,提取两类。

plot(nc$All.index[,4], type="o", ylab="CCC", xlab="Number of clusters", col="blue")

 

结果分析:现NbClust包中的立方聚类规则(Cubic Cluster CriteriaCCC)往往可以帮助我们揭示不存在的结构。当CCC的值为负并且对于两类或是更多的类递减时,就是典型的单峰分布。

posted @ 2021-08-13 17:04  zhang-X  阅读(507)  评论(0)    收藏  举报