分享

谱聚类

 脑系科数据科学 2020-07-01

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

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多