通俗易懂描述谱聚类

复习:实对称阵的特征值是实数因此实对称阵不同特征值的特征向量一定是正交的,这个正交是实数范围内的正交。

首先我们来看什么叫谱这个字是什么意思,比如说我们唱歌的时候有一个歌谱,那个歌谱就来确定了我们这首歌它唱的旋律是什么样子,我们唱的这个歌是不是在谱上,有没有跑调对吧。

而这个我们想定义一个矩阵A它的谱怎么定义呢?OK,因为矩阵A我们可以用它的特征值\lambda _{1}......\lambda _{n}去做度量的。因为Au=\lambda u,那么这样的话入本身可以作为A的一种度量方案。那这样我们把所有的特征值拿出来,我们就认为得到了A它的谱,也就是说一个方阵它的全体就构成了谱,这就是它的定义了。然后呢,一个矩阵A的话往往是用A^{T}A去求它的最大特征值把它叫做谱。然后所谓的谱半径就是所有的谱中的那个最大的那个值。所以以后要是看到某个算法声称叫做谱什么的,它极有可能就是用的特征值和特征向量的办法去来求的。而这个谱聚类真的是基于图论的办法来做聚类,然后来求这个样本数据的拉普拉斯矩阵,对这个矩阵去求特征向量,利用这个特征向量做聚类,从而达到对样本数据做聚类的目的。

我们先来看它是怎么做的,在来形式化的看一下为什么。

先看第一点,就是说对于这样一个算法我们其实第一步要来度量第i个和第j个样本的相似度S_{ij},这个其实是这么来度量相似度的问题,最常用的相似度是高斯相似度也就是所谓的径向基函数(RBF)(它其实就是度量了两个样本之间的相似性)。那么现在任意两个样本都能求这个S_{ij},如果是有ñ个样本的时候,形成了ñ阶的矩阵,并且我们如果是用这种高斯相似度的话,而且S_{ij}是对于S_{ji}的,因此这样一个矩阵是对称的。现在不管怎么样能够得到一个相似度的矩阵S,当然我们做一个规定,就是对角线上都写零,这是为了方便我们做计算。我们把第i个样本到所有样本相似度的和加起来叫做度。第i个样本它的度就等于d_{i}=S_{i1}+S_{i1}+......+S_{in}。我们把相似度就认为是连接边的权值,那这个加和不就是这个点它出现的权值的和嘛。然后我们把所有的d写在一个矩阵的对 线上,其它位置都取零。

现在我们做一个最为神奇的事情,我们先去用这D这个矩阵,减去W这矩阵得到一个新的矩阵我们把它叫做拉普拉斯矩阵L = DW。因为D和W都是一个对称的,所以L也是一个对称的矩阵。所以我们对于这样一个对称的矩阵就可以求它的特征值和特征向量。

拉普拉斯矩阵:L=D-W

这个D和W都是对称阵,对它做一个变换:

                                                               f^{T}Lf=f^{T}Df-f^{T}Wf=

                                                                 \sum_{i=1}^{n}d_{i}f_{i}^{2}-\sum_{i,j=1}^{n}f_{i}f_{j}w_{ij}=

                                                   \frac{1}{2}\left ( \sum_{i=1}^{n}d_{i}f_{i}^{2}-2\sum_{i,j=1}^{n}f_{i}f_{j}w_{ij}+\sum_{j=1}^{n}d_{j}f_{j}^{2} \right )=

                                                                  \frac{1}{2}\sum_{i,j=1}^{n}w_{ij}(f_{i}-f_{j})^{2}

它有若干个特征值\lambda _{1}......\lambda _{n},比如前面很多\lambda都是零,对应的也有n个特征向量u _{1}......u_{n},我们现在如果是来做一个聚类,要求它的簇的个数是k个,那我们就取前k个\lambda,从小到大排得到\lambda _{1}......\lambda _{k}。但别忘了,这个L矩阵是一个n乘n的矩阵,n是样本个数,其实这个u1的样子是(u_{11},u_{21}......u_{n1})^{T}这么一个列向量,u2也是一样的,uk也是。把它展开其实我们可以得到U这样一个矩阵,它是n行k列的,因为我们只取了前k个嘛。对于这样一个n行k列的矩阵U,我们这么做呢?我们认为第一个样本,它的特征就是u11,……,u1k,第n个样本的特征就是un1,……unk,我们现在眼中就是对于这样一个数据,相当于拿到手了n个样本,而每个样本都是k维的,我们做一个k均值总可以吧,其实相当于对这n个样本做了一个聚类,聚成了k份对吧。那这样的一个聚类结果不就相当于对原始的样本做了一个聚类嘛。也就是说这个k均值的聚类结果是什么我们最后的最终的聚类结果就是什么,这就是所谓的谱聚类的做法。

再来总结一下,假定有m个样本,这样我们就可以定义一个Sij的相似度,比如说就用高斯相似度,我们现在就可以做一个矩阵W,其中每一个值表示第i个样本到第j个样本的相似度,然后呢我们对W让它主对角线强制取零,把每一行的数都加起来再写到对角线上并令其它元素等于零,得到了一个矩阵D,然后定义一个L=D-W,而这L是一个正定的,也就是说如果要去计算它的特征值的时候,把它的特征值从小到大排列,\lambda _{1}一定等于零,然后每一个特征值都有一个特征向量ui,而我们知道每个ui都是一个列向量,而我们在做谱聚类的时候选k个簇,然后选出前k小的特征值\lambda _{1}......\lambda _{k},现在把它们展开,就截出了一个m行k列的矩阵,将这矩阵定义做U,我们现在换个视角,第一行的k个数是第一样本的特征,第m行的是第m个样本的特征,相当于我们本来的m个样本用k均值聚类聚成了k个簇,它的最终结果是什么,谱聚类的结果就是什么。

猜你喜欢

转载自blog.csdn.net/weixin_38241876/article/details/84892529