基于R语言的聚类(谱聚类)

来源:互联网 发布:php域名授权管理系统 编辑:程序博客网 时间:2024/06/08 16:25

谱聚类
在上一讲当中,我们讲解了基于模型的聚类,也就是混合模型,实质上是首先拟合一个混合概率分布,再求条件概率,最终确定每一个点应当属于哪一类。在这一讲当中,我们谈一谈谱聚类,谱聚类和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()

原始数据
原始数据
下面我们进行谱聚类,为了观察到效果,我们拿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())

k-means聚类效果图
基于k-means的聚类
根据上图可以看到,k-means的聚类效果不行,对于这种形状类的数据,k-means能力还是差一些。下面我们看看谱聚类的效果
谱聚类效果图
可以看到,效果非常好,谱聚类就是为了解决这种奇形怪状的数据。至于原理的话,我们后面会介绍

原创粉丝点击