基于R语言的聚类(谱聚类)
程序员文章站
2022-07-13 11:58:27
...
谱聚类
在上一讲当中,我们讲解了基于模型的聚类,也就是混合模型,实质上是首先拟合一个混合概率分布,再求条件概率,最终确定每一个点应当属于哪一类。在这一讲当中,我们谈一谈谱聚类,谱聚类和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(aaa@qq.comData)
#进行可视化
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能力还是差一些。下面我们看看谱聚类的效果
可以看到,效果非常好,谱聚类就是为了解决这种奇形怪状的数据。至于原理的话,我们后面会介绍
上一篇: P1914 小书童——密码