谱聚类(上篇)—谱图理论

      谱图理论是谱聚类算法的基础,是线性代数和图理论结合的产物。这里的"谱"不是音乐里面的音符,而是线性代数里面所有特征值的集合。图是图论里面点与边的集合。

1. 特征值

      线性代数(高等代数)中有一节专门讲矩阵特征值。当我们谈起矩阵时,矩阵的样子首先浮现我的脑海里。如下所示:

\[\left[\begin{matrix} 1 & 2 & ... & 8\\ 3 & 4 & ... & 10\\ ... & ... & ... & ...\\ 20 & 5 & ... & 0 \end{matrix}\right] \]

我可以简单地将矩阵描述为由中括号裹起来的一堆数字。矩阵可以使空间中的向量进行运动。比如:旋转、平移、伸缩等。如下所示:

\[\left[\begin{matrix} 1 & 1\\ 0 & 1\\ \end{matrix}\right](1, 2)^{T} =(1, 3)^{T} \]

上述的运动变换多端,难以把握。我们现在要寻找一类方向固定的向量。即\(A\vec{x}=\lambda\vec{x}\)(\(\lambda\not=0\)).求解特征值等同于求\((A-\lambda{E})\vec{x}=\vec{0}\)线性方程组的解。

2. 图

      在图论中,图是由顶点(Vertex、node)以及连接顶点的边(edge)组成。顶点表示研究对象,边表示两个对象之间特定的关系。记为\(G=(V,E)\)。其中\(V\)表示顶点集合,\(E\)表示边集合。

(1) 有向图和无向图

      如果图中的边存在方向性,则称这样的边为有向边\(e_{ij}=<v_i, v_j>\),其中\(v_i\)是这条边的起点,\(v_j\)是有向边的终点,包含有向边的图为有向图。与有向图相对应的图称为无向图。在无向图中,边是没有方向的,即\(e_{ij}=<v_i, v_j>=<v_j, v_i>=e_{ji}\)

(2) 非加权图与加权图

      如果图里的每条边与实数对应,我们称这样的图为加权图。该实数称为对应边的权重。反之,为非加权图。

(3) 连通图与非连通图

      如果图中存在孤立的顶点,没有任何边与之相连,这样的图称为非连通图。反之,称为连通图。

(4) 邻居

      如果存在一条边连接两个顶点\(v_i\)\(v_j\),则称这两个顶点互称为邻居。

(5) 度

      以\(v_i\)为端点的边的数目称为\(v_i\)的度(Degree)。

(6) 图的储存与遍历

a. 邻接矩阵和关联矩阵

      邻接矩阵\(A\)描述顶点之间的关联,\(A\in{R^{N\times{N}}}\),其定义为:

\[ A_{ij}= \begin{cases} 1, & \text {if $(v_i, v_j)\subseteq{E}$} \\ 0, & \text {else} \end{cases} \]

用邻接矩阵储存图的时候,需要一个一维数组表示顶点集合,需要一个二维数组表示邻接矩阵。实际开发中,邻接矩阵往往会出现大量0值,因此可以用稀疏矩阵格式来储存邻接矩阵。
有时候,我们用关联矩阵\(B\in{R^{N\times{N}}}\)来描述节点与边的关系,定义如下:

\[ B_{ij}= \begin{cases} 1, & \text {if $v_i$与$e_j$相连} \\ 0, & \text {else} \end{cases} \]

用关联矩阵储存图的时候,需要两个一维数组分别表示顶点集合和边集合,需要一个二维数组表示关联矩阵。

b. 图的遍历主要有两种算法

【深度优先搜索】
      深度优先搜索时一个递归算法,有回退的过程。算法思想:从图中某个顶点\(v_i\)开始,由\(v_i\)出发,访问它的任意一个邻居\(w_1\),访问\(w_1\)的所有邻居中未被访问过的顶点\(w_2\);然后,从\(w_2\)出发,依次访问,直到出现某个顶点不再有邻居未被访问。接着,回退一步到前一次刚被访问过的顶点,看是否还有未被访问过的邻居,如果有,则访问该邻居,之后再从该邻居出发,进行与前面类似的访问;如果没有,就再退一步进行类似的访问。重复上述过程,直到该图所有顶点都被访问过为止。

【广度优先搜索】
      广度优先搜索时一个分层的搜索过程,没有退回过程。算法思想:从图中的某个顶点\(v_i\)开始,由\(v_i\)出发,依次访问\(v_i\)的所有未被访问过的邻居\(w_1,w_2,...,w_n\),然后再顺序访问\(w_1,w_2,...,w_n\)的所有未被访问的邻居,一层层的执行下去,直到所有顶点被访问到为止。

3. 谱图理论—拉普拉斯算子

      拉普拉斯算子将线性代数和图论结合起来,这节我们讲讲拉普拉斯算子。

(1) 微分中的拉普拉斯算子

      拉普拉斯算子是\(n\)维欧式空间中的一个二阶微分算子,定义为梯度的散度(散度衡量一点处的向量场是发散还是吸收)。假设\(f\)是一元二阶可微函数,则\(f\)的拉普拉斯算子:

\[\Delta{f} = \nabla^{2}f \]

\(f\)的拉普拉斯算子也是笛卡尔坐标系中的所有非混合二阶偏导数:

\[\Delta{f}=\sum_{i=1}^{n}\frac{\partial^2{f}}{\partial^2{x_i^2}} \]

(2) 导数的定义

a. 一元函数

      设函数\(y=f(x)\)在点\(x_0\)的某个领域内有定义,当自变量\(x\)\(x_0\)处有增量\(\Delta{x}\),相应地函数的增量\(\Delta{y}=\Delta{f}=f(x_0+\Delta{x})-f(x_0)\),则在\(x_0\)点处\(f(x)\)的导数的近似计算公式如下:

\[f^{'}(x)\approx\frac{f(x+\Delta{x})-f(x)}{\Delta{x}} \]

对于二阶导数,近似计算公式如下:

\[f^{'}(x)\approx\frac{f^{'}(x)-f^{'}(x-\Delta{x})}{\Delta{x}} \approx \frac{\frac{f(x+\Delta{x})-f(x)}{\Delta{x}}-\frac{f(x)-f(x-\Delta{x}))}{\Delta{x}}}{\Delta{x}}\\ =\frac{f(x+\Delta{x})+f(x-\Delta{x})-2f(x)}{\Delta{x}^2} \]

b. 二元函数

      拉普拉斯算子可以用下面近似公式计算:

\[\Delta{f}=\frac{\partial^2{f}}{{\partial{x}^2}}+\frac{\partial^2{f}}{{\partial{y}^2}}\\ \approx\frac{f(x+\Delta{x},y)+f(x-\Delta{x},y)-2f(x,y)}{\Delta{x}^2}+\frac{f(x,y+\Delta{y})+f(x,y-\Delta{y})-2f(x,y)}{\Delta{y}^2} \]

      对上面的二元函数离散化,对自变量的一系列点处的函数值进行采样,得到下面一系列点处的函数值,构成一个矩阵:

\[\left[\begin{matrix} f(x_1,y_1) & f(x_2,y_1) & ... & f(x_n,y_1)\\ f(x_1,y_2) & f(x_2,y_2) & ... & f(x_n,y_2)\\ ... & ... & ... & ...\\ f(x_1,y_n) & f(x_2,y_n) & ... & f(x_n,y_n) \end{matrix}\right] \]

      点\((x_i,y_i)\)处的拉普拉斯算子计算公式(这里\(\Delta=1\),即\(\Delta{x}=x_{i+1}-x_{i}=1\),\(\Delta{y}=y_{i+1}-y_{i}=1\)):

\[\frac{f(x_i+\Delta{x},y_j)+f(x_i-\Delta{x},y_j)-2f(x_i,y_j)}{\Delta{x}^2}+\frac{f(x_i,y_j+\Delta{y})+f(x_i,y_j-\Delta{y})-2f(x_i,y_j)}{\Delta{y}^2}\\ =\frac{f(x_{i+1},y_j)+f(x_{i-1},y_j)-2f(x_i,y_j)}{1^2}+\frac{f(x_i,y_{j+1})+f(x_i,y_{j-1})-2f(x_i,y_j)}{1^2}\\ =f(x_{i+1},y_j)+f(x_{i-1},y_j)+f(x_i,y_{j+1})+f(x_i,y_{j-1})-4f(x_i,y_j) \]

(3) 图的拉普拉斯矩阵

      根据上述公式可得,一个点的拉普拉斯算子只与相邻的四个采样点有关。下面需要将拉普拉斯算子进行推广。如果将图的顶点处的值看作函数值,则该顶点\(i\)处的拉普拉斯算子为

\[\Delta{f_i}=\sum_{j\in{N_i}}(f_i-f_j) \]

其中,\(N_i\)是顶点\(i\)的所有邻居顶点集合。当图的边带有权重的时候,计算公式如下:

\[\Delta{f_i}=\sum_{j\in{N_i}}w_{ij}(f_i-f_j) \]

      如果\(j\notin{N_i}\),则\(w_{ij}=0\)。因此上式可以写成:

\[\Delta{f_i}=\sum_{j\in{V}}w_{ij}(f_i-f_j)=\sum_{j\in{V}}w_{ij}f_i-\sum_{j\in{V}}w_{ij}f_j=d_if_i-\pmb{w_if} \]

其中,\(d_i\)是顶点\(i\)的加权度,\(w_i\)是邻接矩阵的第\(i\)行。
      对于图的所有顶点,我们有

\[\left[\begin{matrix} \Delta{f_1}\\ \Delta{f_2}\\ ...\\ \Delta{f_n} \end{matrix}\right] = \left[\begin{matrix} d_1f_1 - \pmb{w_1f}\\ d_2f_2 - \pmb{w_2f}\\ ...\\ d_nf_n - \pmb{w_nf} \end{matrix}\right] = \left[\begin{matrix} d_1 & ... & 0\\ 0 & d_2 & 0\\ ... & ... & ...\\ 0 & ... & d_n \end{matrix}\right] \left[\begin{matrix} f_1\\ f_2\\ ...\\ f_n \end{matrix}\right] - \left[\begin{matrix} \pmb{w_1}\\ \pmb{w_2}\\ ...\\ \pmb{w_n} \end{matrix}\right] \left[\begin{matrix} f_1\\ f_2\\ ...\\ f_n \end{matrix}\right] =(\pmb{D}-\pmb{W})\pmb{f} \]

受上式的启发,我们利用邻接矩阵和加权度矩阵定义拉普拉斯矩阵,记为\(\pmb{L=D-W}\).

posted @ 2021-07-12 15:28  编码雪人  阅读(484)  评论(0编辑  收藏  举报