一、概述
对于下图所示的数据进行聚类,可以采用GMM或者K-Means的方法:
然而对于下图所示的数据,单纯的GMM和K-Means就无效了,可以通过核方法对数据进行转换,然后再进行聚类:
如果直接对上图所示的数据进行聚类的话可以考虑采用谱聚类(spectral clustering)的方法。
总结来说,聚类算法可以分为两种思路:
①Compactness,这类有 K-means,GMM 等,但是这类算法只能处理凸集,为了处理非凸的样本集,必须引⼊核技巧。
②Connectivity,这类以谱聚类为代表。
二、基础知识
- 无向权重图
谱聚类的方法基于带权重的无向图,图的每个节点是一个样本点,图的边有权重,权重代表两个样本点的相似度。
假设总共个样本点,这些样本点构成的图可以用表示,其中,图中的每个点也就代表了一个样本,是边,用邻接矩阵(也是相似度矩阵)来表示,,由于是无向图,因此。
另外还有度的概念,这里可以类比有向图中的出度和入度的概念,不过图中的点的度并不是和该点相连的点的数量,而是和其相连的边的权重之和,也就是邻接矩阵的每一行的值加起来,即:
而图的度矩阵(对角矩阵)可以表示如下:
另外我们定义,对于点集的一个子集,我们定义:
- 邻接矩阵
构建邻接矩阵一共有三种方法,分别是-近邻法、近邻法和全连接法。
- -近邻法
首先需要设置一个阈值,比较任意两点与之间的距离与的大小,定义邻接矩阵如下:
这种方法表示如果两个样本点之间的欧氏距离的平方小于阈值,则它们之间是有边的。
使用这种方法,两点相似度只有和两个值,这种度量很不精确,因此在实际应用中很少使用-近邻法。
- 近邻法
使用KNN算法遍历所有样本点,取每个样本点最近的个点作为近邻。这种方法会造成构造的邻接矩阵不对称,而谱聚类算法需要一个对称的邻接矩阵。因此有以下两种方法来构造一个对称的邻接矩阵:
①只要一个点在另一个点的近邻内,则,否则为,相似度可以使用径向基函数来度量:
②只有两个点互为近邻,才会有,否则为:
上述方法是不用先建立图而直接获得邻接矩阵,在编程实现时能够更加简便,构建的邻接矩阵也就表明了哪些样本点之间有边连接。也可以采用先建立图然后再在图上有边的数据点上保留权重获得邻接矩阵的方法。
- 全连接法
这种方法会使所有的都大于,可以选择不用的核函数来度量相似度,比如多项式核函数、径向基核函数和核函数。最常用的是径向基核函数:
在实际应用时选择全连接法建立邻接矩阵是最普遍的,在选择相似度度量时径向基核函数是最普遍的。
- 拉普拉斯矩阵
图的拉普拉斯矩阵(Graph Laplacian)是一个对称矩阵,用度矩阵减去邻接矩阵得到的矩阵就被定义为拉普拉斯矩阵,。拉普拉斯矩阵有一些性质如下:
①对称性。
②由于其对称性,则它的所有特征值都是实数。
③对于任意向量,有:
这一性质利用拉普拉斯矩阵的性质很容易可以得到:
④拉普拉斯矩阵是半正定的,则其所有特征值非负,这个性质由性质③很容易得出。并且其最小的特征值为,这是因为的每一行和为,对于全向量,有。
- 无向图切图
对于无向图的切图,我们的目标是将切成相互没有连接的个子图,每个子图节点的集合为,它们满足,且。
对于任意两个子图点的集合,定义和之间的切图权重为:
对于个子图的集合,定义切图为:
上式中是的补集,意为除子集以外的其他子集的并集。
每个子图就相当于聚类的一个类,找到子图内点的权重之和最高,子图间的点的权重之和最低的切图就相当于找到了最佳的聚类。实现这一点的一个很自然的想法是最小化。然而这种方法存在问题,也就是最小化的对应的切图不一定就是符合要求的最优的切图,如下图:
在上面的例子中,我们选择在最小的权重上进行切图,比如在和之间进行切图,这样可以使得最小,但并不是最优的切图。
接下介绍谱聚类使用的切图方法。
三、谱聚类之切图聚类
为了避免上述最小化存在的问题,需要对每个子图的规模做出限制,接下来介绍两种切图方法,分别是和。
- 切图
切图为了避免上述最小切图,对于每个切图,不只考虑最小化,还考虑最大化每个子图点的个数,即:
为了最小化这个函数,我们引入指示向量,对于每一个向量, 它是一个维向量,另外定义为:
那么对于,有:
由上式可知,某一个子图的也就是,所有的个子图的表达式也就是:
上式中为矩阵的迹,,需要注意这里的满足,并且的元素只能取或者。也就是说我们需要优化以下目标函数:
由于每个元素只能取两个值,因此上面的目标函数是不可求导的。这里每个指示向量都是维的,而且每个元素只有两种取值,所以就有种取值方式,一共有个指示向量,因此共有种,因此想要找到满足使目标函数最小的是一个NP难的问题。
由于存在上述问题,所以我们采用降维的思想来考虑解决这个优化问题。我们需要最小化,也就是需要优化每一个,这里的是单位正交基,是对称矩阵,因此的最大值是的最大特征值,最小值是的最小特征值。之所以有这种结论可以参考主成分分析PCA的解法,在PCA中需要找到协方差矩阵(类比此处的拉普拉斯矩阵,它们都是对称的)的最大特征值,而在谱聚类中需要找到最小的个非零特征值,然后得到这些特征值对应的特征向量,通过这个过程我们也就完成了数据的降维,最终就是降维的结果,使用这个结果来近似解决这个NP难的问题。
一般我们仍然需要对按行做标准化,也就是:
由于在降维时损失了少量信息,导致得到的优化后的指示向量对应的现在不能完全指示各样本的归属,因此在得到降维结果后还需要进行一次传统的聚类,比如K-Means。
- 切图
切图的方法与切图的方法很类似,只是把的分母换成。使用切图时,由于子图样本个数多不一定权重就大(只有权重大时,子图内样本点的相似度才高),因此切图时基于权重也更符合目标,一般来说切图优于切图:
另外需要修改指示向量的表示形式,的指示向量使用来标示样本归属,而使用子图权重来标示指示向量,定义如下:
类似的,对于,有:
同样的优化目标也就是:
但是现在的约束条件不再满足,而是,证明如下:
对于对角线元素有:
由于和不可能同时非零,因此对于非对角线元素有:
因此有。我们最终优化的目标函数为:
此时指示向量并不是标准正交基,所以在中的降维思想不能直接使用。对于这个问题,只需要将指示向量做一个转化即可,我们令,则:
也就是说优化的目标变成了:
可以发现这个式子和基本一致,只是中间的变成了。如此我们就可以按照的思想,求出的前个最小非零特征值,然后求对应的特征向量再进行标准化得到最后的特征矩阵,然后再使用K-Means等传统方法进行聚类即可。
一般来说,相当于对拉普拉普斯矩阵做了一次标准化,即。
四、总结
- 算法流程
以切图为例总结一下谱聚类算法的流程:
输入:样本集,邻接矩阵的生成方式,降维后的维度,聚类方法,聚类的簇个数。
输出:簇划分。
①根据输入的邻接矩阵生成方式构建样本的邻接矩阵矩阵和度矩阵;
②计算拉普拉斯矩阵;
③构建标准化后的拉普拉斯矩阵;
④计算的最小的前个非零特征值对应的特征向量;
⑤将各自对应的特征向量组成的矩阵按行标准化,最终得到维的特征矩阵;
⑥对的每一行作为一个维的样本,共个样本,用输入的聚类方法进行聚类,聚类的簇的个数为;
⑦得到簇划分。
- 优缺点
谱聚类的优点有:
①谱聚类只需要数据之间的相似度矩阵,因此对于处理稀疏数据的聚类很有效。这点传统聚类算法比如K-Means很难做到。
②由于使用了降维,因此在处理高维数据聚类时的复杂度比传统聚类算法好。
谱聚类的缺点有:
①如果最终聚类的维度非常高,则由于降维的幅度不够,谱聚类的运行速度和最后的聚类效果均不好。
②聚类效果依赖于相似矩阵,不同的相似矩阵得到的最终聚类效果可能很不同。