写在前面:健忘星人自学笔记,仅供参考
本章预计简单介绍一下谱聚类的内容,由于谱聚类是基于图论的,虽然使用起来简单,但是理解清楚并不容易,需要一定的知识铺垫,对萌新很不友好,一部分推导内容下文省略。
但是大家如果能认真啃下来问题不是很大,下面是一篇较为简单易懂的阅读材料,希望能有帮助
谱聚类详细、入门级介绍 - 百度文库wenku.baidu.com专业性较好的参考资料:
https://blog.csdn.net/qq_24519677/article/details/82291867blog.csdn.net一、谱聚类原理
谱聚类,是一种基于 图论 的聚类方法,通过样本数据的 拉普拉斯矩阵的特征向量 进行聚类。
上面的定义看不懂没关系,我们换一种说法。
谱聚类的思想,是将原问题转化为“图分割“的问题。
这里面涉及两个关键的步骤:
(1) 如何将原数据,转化为“无向权重图“
(2)如何对图进行分割?
1.1 无向图定义
上图是一张“无向权重图“示例
图,是若干个 顶点 和 边 相互连接组成的,分为无向图和有向图。
边没有方向的图,称为无向图。
在上图中,我们观察到有6个顶点,也就是有6组数据样本,用 V={
无向图,表示为 G(V, E)
我们注意到,边上显示的数字表示的是两个顶点之间的逻辑关系(相似程度),我们称之为“权重”,用
在无向图中,边的权重
并且,
1.2 图分割初探
在绘制出无向图之后,我们想要做的,是将图完全分成若干个子图。
要求: 同子图内的点相似度高;
不同子图内的点相似度低;
上图的划分,看起来似乎是一个不错的选择。
这样切图的方法,我们截断了两条边,损失函数可以定义为被截断边的权重之和
如何选择一个最佳的截断方式? 我们很自然会想到最小化
但是直接最小化,又会遇到一个问题,
例如,按照上图的分割,切成了单点离散的图,显然这样是最快且最能满足那个最小化操作的。但这明显不是想要的结果,合理的切分结果应该是组内的样本点尽可能的多,所以后面我们要学习 RatioCut 和 Ncut 的分割方法。
通过上面的介绍,希望大家能对谱聚类的原理有一个大体上的了解,下面我们将对算法详细展开。
二、无向图权重
在上面的例子里,我们定义了顶点 i 和 顶点 j 连接起来的边的权重为
将所有权重以矩阵的形式存放,我们称之为邻接矩阵
以上图为例,
注意:
这里我们直接给出了邻接矩阵里的数值。但是在谱聚类问题中,我们只有顶点向量,怎么才能计算得到邻接矩阵呢?
权重的基本思想是,距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高。
但这仅仅是定性,我们需要定量的权重值。
一般来说,我们可以通过样本点距离度量的相似矩阵 S 来获得邻接矩阵W。
构建邻接矩阵W的方法有三类:ϵ-邻近法,Knn 和全连接法。
(1)ϵ-邻近法 (很少用)
对于ϵ-邻近法,它设置了一个距离阈值ϵ,然后用欧式距离
然后根据
从上式可见,两点间的权重要不就是ϵ ,要不就是0,矩阵中没有携带关于数据集的太多信息,所以该方法一般很少使用,在sklearn中也没有使用该方法。
(2)Knn
基本思想是,利用 Knn 算法遍历所有的样本点,取每个样本最近的 k 个点作为近邻,只有和样本距离最近的 k 个点之间的
但是,由于每个样本点的 k 个近邻可能不是完全相同的,所以用此方法构造的相似度矩阵并不是对称的。
为了解决这种问题,一般采取下面两种方法之一:
方法一、只要一个点在另一个点的K近邻中,就保留
方法二、必须两个点互为K近邻,才能保留
(很显然第二种方式比第一种方式生成的相似度矩阵要稀疏。)
(3)全连接法(最常用)
相比前两种方法中,全连接法中所有的点之间的权重值都大于0。
可以选择不同的核函数来定义边权重,常用的有:多项式核函数,高斯核函数和Sigmoid核函数。其中,最常用的是高斯核函数RBF,在sklearn中默认的也是该方法,此时相似矩阵和邻接矩阵相同:
从公式中可以看出,任意两个样本点都有相似度,但是距离较远的样本点之间相似度较低,甚至可以忽略。
其中,参数
上面说了这么多,还只解决了第一个问题,如何将原数据转化为无向权重图 ?
下面我们要说,如何对图进行分割?
三、损失函数与拉普拉斯矩阵
之前,我们定义了损失函数——被截断边的权重之和
假设 G( V, E) 被划分为 G1,G2 两个子图,设G有 n 个顶点
定义 q = [
例如,
按照上图划分,q = [
分子可变换为,
因此,
其中,
补充知识:
若一个矩阵为拉普拉斯矩阵,则其对任意一个向量
拉普拉斯矩阵的计算:
其中,D 为度矩阵,W 为邻接矩阵
邻接矩阵在上面已经介绍过,下面补充介绍一下 度矩阵
对于任意一个点 i,它的度 di 定义为和它相连的所有边的权重之和,即
利用点的定义,度矩阵D是一个对角矩阵,只有主对角线有值。
举例,
顶点1的度,d1 = 0.8 +0.6 +0.1 = 1.5
四、图分割
上面我们对损失函数进行了一系列变换,最终得到
图形分割的一种方法——最小切(Minimum Cut),就是直接最小化上式。
但是之前我们也说过,在许多情况下 Minimum Cut 只是简单的将图中的一个顶点与其余的顶点分开,这并不是我们想要的结果。所以mincut在实际中并不常用。
合理的切分应该是组内的样本点尽可能的多。
下面我们介绍另外两个切图方式 Ratio Cut 和 Normalized Cut,二者都在上式的基础上进行了一定的改进。
在 RatioCut 切图中,不仅要考虑使不同组之间的权重最小化,也考虑了使每个组中的样本点尽量多。
在 N Cut 切图中,除了考虑最小化损失函数之外,还考虑了子图之间的权重大小。
由于子图样本的个数多并不一定权重就大,切图时基于权重也更合目标, 因此一般来说Ncut 切图优于 RatioCut 切图。
证明及推导过程省略,详细请参考推荐阅读2
也可以参考,
转载自:【聚类算法】谱聚类(Spectral Clustering)www.cnblogs.com(有空的时候再详细分解)
五、优缺点
优点:
1)谱聚类只需要数据之间的相似度矩阵,因此对于处理稀疏数据的聚类很有效。这点传统聚类算法比如K-Means很难做到
2)由于使用了降维,因此在处理高维数据聚类时的复杂度比传统聚类算法好。
缺点:
1)如果最终聚类的维度非常高,则由于降维的幅度不够,谱聚类的运行速度和最后的聚类效果均不好。
2) 聚类效果依赖于相似矩阵,不同的相似矩阵得到的最终聚类效果可能很不同
今天的内容就到这里,感谢观看~~