谱聚类为啥要用到kmeans

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了谱聚类为啥要用到kmeans相关的知识,希望对你有一定的参考价值。

参考技术A 应该是特征值最小的前k个,你看看第一个特征值是不是非常接近于0,这个特证值对应的矢量剔除 http://blog.pluskid.org/?p=287 这个文章不知道你有没有看过,是从图算法的角度来解释的。 不过真正要直观地理解谱聚类,其实应该从物理的简正模振动...9793 参考技术B 目标函数是关于子图划分指示向量的函数,该向量的值根据子图划分确定,是离散的,该问题是NP的,转换成求连续实数域上的解,最后使用K-means离散化 参考技术C 谱聚类分两步,第一步降维,第二部聚类。不用K均值用别的聚类也行。

白话啥是谱聚类算法

参考技术A

谱聚类(Spectral Clustering, SC) , 是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远

换句话说,

当遇到比较复杂的聚类问题时,k-means 很难有较好的效果时,可以用谱聚类。

谱聚类算法流程为:

Input:
Output:

一句话总结这个流程就是,利用样本数据,得到相似矩阵(拉普拉斯矩阵),再进行特征分解后得到特征向量,对特征向量构成的样本进行聚类。

其中涉及的主要概念:

如何得到这个邻接矩阵?

可以通过样本点距离度量的相似矩阵S来获得邻接矩阵W

构建邻接矩阵W的方法有三个:ϵ-邻近法,K邻近法和全连接法。

最常用的是全连接法,它选择不同的核函数来定义边权重,最常用的是高斯核函数RBF

那么如何切图可以让子图内的点权重和高,子图间的点权重和低呢:

先定义两个子图A和B之间的切图权重为:

再定义有 k 个子图的切图cut为:即所有子图 与其补集 之间的切图权重之和:

这样当我们最小化这个cut时,就相当于让子图间的点权重和低

但以最小化 cut 为目标,存在一个问题,就是有时候最小cut的切图方式,却不是最优的

为避免最小切图导致的切图效果不佳,需要对每个子图的规模做出限定,一般有两种切图方式,RatioCut,Ncut, 常用的是 Ncut切图

RatioCut 切图函数为:

它的优化目标为:

进一步令 ,则有 ,于是优化目标变为:

然后就可以求出 的最小的前k个特征值,求出特征向量,并标准化,得到特征矩阵F, 再对F进行一次传统的聚类方法,最终就完成了聚类任务。

一个用 sklearn 做谱聚类的小例子:

学习资料:
https://www.cnblogs.com/pinard/p/6221564.html
https://www.cnblogs.com/sparkwen/p/3155850.html

以上是关于谱聚类为啥要用到kmeans的主要内容,如果未能解决你的问题,请参考以下文章

转:谱聚类

利用谱聚类算法解决非完全图的聚类

谱聚类算法总结

谱聚类(spectral clustering)原理总结

白话啥是谱聚类算法

谱聚类算法及其代码(Spectral Clustering)