https://blog.csdn.net/hfutxiaoguozhi/article/details/78831405 谱聚类 在上一讲当中,我们讲解了基于模型的聚类,也就是混合模型,实质上是首先拟合一个混合概率分布,再求条件概率,最终确定每一个点应当属于哪一类。在这一讲当中,我们谈一谈谱聚类,谱聚类和DBSCAN这种聚类方法一样,都是适用于那种奇形怪状的数据集,绝大多数都是人造数据集,比如下图: 像这种样子的数据,k-means或者一般基于距离的聚类算法都会无效。基于密度的聚类算法也不行,因为样本整体分布比较均匀,均匀的线条构成了各种图形,那么谱聚类就是适用这种情形。下面通过一个例子说明。 #清除变量空间 rm(list=ls()) #载入包 library("kernlab") #载入画图包 library("ggplot2") #引入数据 data(spirals) #将数据设置为数据框格式 df<-as.data.frame(spirals) #重新命名 names(df)<-c("x1","x2") #查看原始数据 ggplot(df,aes(x=x1,y=x2))+geom_point() 1 2 3 4 5 6 7 8 9 10 11 12 13 14 原始数据 下面我们进行谱聚类,为了观察到效果,我们拿k-means进行对比 #进行谱聚类 sc <- specc(spirals, centers=2) df1<-df #将类标签和原始数据融合 df1$class<-as.factor(sc@.Data) #进行可视化 ggplot(df1,aes(x=x1,y=x2,colour=class))+geom_point() #进行k-means聚类 set.seed(123) km_result <- kmeans(df, 2, nstart = 24) #k-means进行可视化展示 fviz_cluster(km_result, df, geom = "point", ellipse= FALSE, show.clust.cent = FALSE, palette = "jco", ggtheme = theme_classic()) 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 k-means聚类效果图 根据上图可以看到,k-means的聚类效果不行,对于这种形状类的数据,k-means能力还是差一些。下面我们看看谱聚类的效果 可以看到,效果非常好 ———————————————— 版权声明:本文为CSDN博主「data_honey」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/hfutxiaoguozhi/java/article/details/78831405 |
|