欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-13 11:58:27
...

谱聚类
在上一讲当中,我们讲解了基于模型的聚类,也就是混合模型,实质上是首先拟合一个混合概率分布,再求条件概率,最终确定每一个点应当属于哪一类。在这一讲当中,我们谈一谈谱聚类,谱聚类和DBSCAN这种聚类方法一样,都是适用于那种奇形怪状的数据集,绝大多数都是人造数据集,比如下图:
基于R语言的聚类(谱聚类)
像这种样子的数据,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()

原始数据
基于R语言的聚类(谱聚类)
下面我们进行谱聚类,为了观察到效果,我们拿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聚类效果图
基于R语言的聚类(谱聚类)
根据上图可以看到,k-means的聚类效果不行,对于这种形状类的数据,k-means能力还是差一些。下面我们看看谱聚类的效果
基于R语言的聚类(谱聚类)
可以看到,效果非常好,谱聚类就是为了解决这种奇形怪状的数据。至于原理的话,我们后面会介绍

相关标签: r语言 算法