library(mlbench)
library(factoextra)
library(ggplot2)
library (cluster)
library(fpc)
data <-shiyan5
colnames(X)=c("x1","x2","x3","x4","x5","x6","x7")
data
plot(data)
DATA<-data[,-1]
DATA
#对data进行数据集群性评估
res<-get_clust_tendency(DATA,5)
#8.查看Hopkins统计量
res$hopkins_stat
#1
gap_stat <- clusGap(DATA,FUN=kmeans,nstart=25,K.max=13,B=14)
#对聚类簇数进行计算,其中data为数据对象
#FUN为对应的聚类方法
#K.max为最大的聚类簇数的限制
#B为蒙特卡洛样本数,可自己视情况而定
#结果可视化
fviz_gap_stat(gap_stat)
#2
fviz_nbclust(DATA, kmeans, method = "wss") + geom_vline(xintercept = 5,linetype=2)
#组内平方误差拐点图制作,其中kmeans实际对应FUN参数
#method为用于估计最佳簇数的方法,可能的值是“silhouette”(平均廓形宽度),“wss”(平方和内的总数)和“gap_stat”(间隙统计)
#geom则将参考线添加到绘图中,此处将参考线添加到了5的地方,线的型号设置为2
km_result <- kmeans(DATA, centers=5,nstart = 10,algorithm="Hartigan-Wong",iter.max=20)
#使用kmeans函数进行聚类,其中5为簇数(由上一步得到)
#nstart为随机
#algorithm输入值是缩写的字符,算法有“Hartigan-Wong”, “Lloyd”,“Forgy”,”MacQueen”四种,注意Lloyd和Forgy是同一种算法的不同称谓
#iter.max即迭代次数,不写的话默认是10次。否则就是最大迭代次数。
print(km_result)#1.将聚类结果输出
dd <- cbind(data, cluster = km_result$cluster)#将聚类cluster与数据进行合并
###可视化###
fviz_cluster(km_result, DATA,
palette = c("#2E9FDF", "#00AFBB","#E7B800", "#FC4E07","#f5ccd8"),
ellipse.type = "euclid",
star.plot = TRUE,
repel = TRUE,
main="K-means Cluster plot",
ggtheme = theme_minimal()
)
#其中km_result为K-means聚类分析产生的结果
#data为进行聚类分析的数据
#palette为对应的颜色板
#repel为一个布尔值,是否使用ggrepel来避免过度绘制文本标签
#ellipse.type 为字符指定帧类型,包括:"t", "norm", "euclid"
#main为图的标题
#ggtheme为绘图函数,默认值为theme_pubr(),允许的值包括ggplot2官方主题:theme_gray()、theme_b
###评估一###
stats <- cluster.stats(dist(DATA)^2, km_result$cluster)
sli1_km<- stats$avg.silwidth#1.使用fpc包来计算km_result的 avg.silwidth(平均的轮廓宽度)
stats$avg.silwidth
###评估二###
sil2_km <- silhouette ( km_result$cluster, dist(DATA)^2)
rownames(sil2_km) <- rownames(DATA)
fviz_silhouette(sil2_km) #2. 使用cluster包中silhouette()函数来计算轮廓系数,最终并对轮廓系