谱聚类算法入门教程(二)—— 构造谱聚类算法的目标函数

文章目录

1. 构造相似度矩阵

在教程的第一部分我们已经介绍过,谱聚类方法就是要把相似的点分在一起。因此,在一开始,我们需要有一个表示不同数据点之间相似度的值,这个值越大,表示两个数据点的越相似。

常常用于计算两个数据点之间相似度的函数有欧式距离,杰卡德相似系数,余弦相似度系数,高斯核函数等,这里不会告诉你应该使用什么核函数来计算两个数据点之间的相似度,因为选择什么函数来计算相似度最好目前也没有确定的结论。

假设给出数据集 V V V,数据集里保存了每个数据点(总共有 N N N 个数据点),由此我们可以构建一个 N X N N X N NXN 的相似度矩阵 W W W,矩阵 W W W 中第 i i i 行,第 j j j 列的元素 w i , j w_{i,j} wi,j 保存着数据集中第 i i i 个数据点和第 j j j 个数据点的相似度。

2. 一个简单的例子

下面我们将用一个简单的例子来更好地叙述谱聚类方法,这个例子将其扩展到更普遍的情况也是一样成立的。

假设我们有一个数据集: V { v 1 , v 2 , v 3 , v 4 , v 5 , v 6 } V\{v_1,v_2,v_3,v_4,v_5,v_6\} V{v1,v2,v3,v4,v5,v6},每个数据点是一个二维向量,具体的值如下:

v 1 v_1 v1 v 2 v_2 v2 v 3 v_3 v3 v 4 v_4 v4 v 5 v_5 v5 v 6 v_6 v6
(0, 0)(0, 1)(1, 0)(4, 2)(5, 2)(5, 3)

画出数据集的散点图,如下所示:

《谱聚类算法入门教程(二)—— 构造谱聚类算法的目标函数》

从图中我们可以很清晰的看到,原来的6个数据点被分为了两类,我们用下面的方式表示( A ˉ \bar{A} Aˉ表示集合 A A A的补集):

A = v 1 , v 2 , v 3 A = {v_1,v_2,v_3} A=v1,v2,v3

A ˉ = v 4 , v 5 , v 6 \bar{A} = {v_4,v_5,v_6} Aˉ=v4,v5,v6

如果我们定义一个向量 f f f,如果对应编号的数据点在集合 A A A中,那么向量 f f f中对应行的值为1;反之,为 0,即:

f = [ 1 1 1 0 0 0 ] f = \left[ \begin{matrix} 1 \\ 1 \\ 1 \\ 0 \\ 0 \\ 0 \end{matrix}\right] f=111000

这样,我们就获得了一个所有数据点聚类结果的表示,求解这个向量的值就是我们的目标。

不过,上面的做法是对我们人来说的,机器并不能像我们一样一眼就看出来 v 1 , v 2 , v 3 v_1,v_2,v_3 v1,v2,v3 被分为一类, v 4 , v 5 , v 6 v_4,v_5,v_6 v4,v5,v6 被分为另一类,那么机器是怎么分析的呢?

首先,和我们在[第一部分](#1. 构造相似度矩阵)里说的一样,首先,我们需要构造一个相似度矩阵 W W W ,这里我们选择常用的高斯核函数:

w i , j = exp ⁡ ( − ∣ ∣ x i − x j ∣ ∣ 2 2 σ 2 ) w_{i,j} = \exp(-\displaystyle \frac{||x_i – x_j||^2}{2\sigma^2}) wi,j=exp(2σ2xixj2)

进过计算,我们可以得到下面的相似度矩阵 W W W,矩阵中值为 0 的元素表示值非常小,所以用 0 表示:

W = [ 1 0.6 0.6 0 0 0 0.6 1 0.37 0.0002 0 0 0.6 0.37 1 0.0015 0 0 0 0.0002 0.0015 1 0.6 0.37 0 0 0 0.6 1 0.6 0 0 0 0.37 0.6 1 ] W = \left[ \begin{matrix} 1 & 0.6 & 0.6 & 0 & 0 & 0 \\ 0.6 & 1 & 0.37 & 0.0002 & 0 & 0 \\ 0.6 & 0.37 & 1 & 0.0015 & 0 & 0 \\ 0 & 0.0002 & 0.0015 & 1 & 0.6 & 0.37 \\ 0 & 0 & 0 & 0.6 & 1 & 0.6 \\ 0 & 0 & 0 & 0.37 & 0.6 & 1\end{matrix}\right] W=10.60.60000.610.370.0002000.60.3710.00150000.00020.001510.60.370000.610.60000.370.61

这是一个 6 X 6 的对称矩阵,那么下一步就是求解我们的目标向量:

f = [ f 1 = ? f 2 = ? f 3 = ? f 4 = ? f 5 = ? f 6 = ? ] f = \left[ \begin{matrix} f_1=? \\ f_2=? \\ f_3=? \\ f_4=? \\ f_5=? \\ f_6=? \end{matrix}\right] f=f1=?f2=?f3=?f4=?f5=?f6=?

如何求解上面的目标向量呢?考虑下面的式子:

R = ∑ i , j = 1 6 w i , j ( f i − f j ) 2 R = \displaystyle \sum_{i,j = 1}^{6}w_{i,j}(f_i-f_j)^2 R=i,j=16wi,j(fifj)2

我们可以发现,给定一个 f f f,代入上面的公式,如果 R R R 的值越大,说明我们的不同聚类之间的相似度之和越大,而不同聚类之间的相似度应该是越小越好的,所以说明这个聚类的效果是不好的;反之同理。背后的原理很容易理解,因为上述公式就是计算一个聚类的所有元素到另一个聚类的所有元素的相似度之和。

举一个简单的例子:

f = [ 1 1 1 0 0 0 ] T f=\left[ \begin{matrix} 1 & 1 & 1 & 0 & 0 & 0\end{matrix}\right]^T f=[111000]T(为了方便表示,这里的 f f f 使用转置1表示,和上面的表示是一样的),从图上看,即:

W = [ 1 0.6 0.6 0 0 0 0.6 1 0.37 0.0002 0 0 0.6 0.37 1 0.0015 0 0 0 0.0002 0.0015 1 0.6 0.37 0 0 0 0.6 1 0.6 0 0 0 0.37 0.6 1 ] W = \left[ \begin{array} {ccc|ccc}1 & 0.6 & 0.6 & 0 & 0 & 0 \\ 0.6 & 1 & 0.37 & 0.0002 & 0 & 0 \\ 0.6 & 0.37 & 1 & 0.0015 & 0 & 0 \\ \hline 0 & 0.0002 & 0.0015 & 1 & 0.6 & 0.37 \\ 0 & 0 & 0 & 0.6 & 1 & 0.6 \\ 0 & 0 & 0 & 0.37 & 0.6 & 1\end{array}\right] W=10.60.60000.610.370.0002000.60.3710.00150000.00020.001510.60.370000.610.60000.370.61

左上角和右下角的相似度因为 f i = f j f_i = f_j fi=fj 被抵消,故 R = 2 w 2 , 4 + 2 w 3 , 4 = 0.007 R = 2w_{2,4} + 2w_{3,4}=0.007 R=2w2,4+2w3,4=0.007

f = [ 1 1 1 1 0 0 ] T f=\left[ \begin{matrix} 1 & 1 & 1 & 1 & 0 & 0\end{matrix}\right]^T f=[111100]T,同理我们可以计算得 R = 2 w 4 , 5 + 2 w 4 , 6 = 1.94 R = 2w_{4,5} + 2w_{4,6} = 1.94 R=2w4,5+2w4,6=1.94

所以第一种聚类分析是合理的,这也和我们一开始的肉眼看图像得到的结果是一致的;

不过,在谱聚类算法的实际操作中, f f f 通常都不是取 0 和 1 这样简单的值,一种比较常用的取值(RatioCut切图)为:

f i = { 1 ∣ A ∣ k i ∈ A       0 k i ∈ A ˉ f_i = \begin{cases} \sqrt{\displaystyle \frac{1}{|A|}} & k_i \in A \\ \space \space \space \space \space 0 & k_i \in \bar{A} \end{cases} fi=A1      0kiAkiAˉ

可以发现,这么取值也是符合我们上面的判断的,即 R R R 越小,聚类效果越好;我们后面也将使用这样的取值。(至于为什么要这么取值,是因为这样的话就可以比较容易求 R R R 的最小值,下一篇介绍如何求 R R R 的最小值的时候会解释,这里就不赘述了)。

这样一来,我们的目的就是找到一个向量 f f f,满足条件:聚类 A A A 对应的值为 1 ∣ A ∣ \sqrt{\displaystyle \frac{1}{|A|}} A1 ,聚类 A ˉ \bar{A} Aˉ 对应的值为 0 0 0(在这个简单的例子中,我们暂定将数据点分为两类),使得 R = ∑ i , j = 1 6 w i , j ( f i − f j ) 2 R = \displaystyle \sum_{i,j = 1}^{6}w_{i,j}(f_i-f_j)^2 R=i,j=16wi,j(fifj)2 取得最小值,即目标函数为:

a r g min ⁡ f ∈ R 6 ∑ i , j = 1 6 w i , j ( f i − f j ) 2 arg \min \limits_{f \in \R^6} \displaystyle \sum_{i,j = 1}^{6}w_{i,j}(f_i-f_j)^2 argfR6mini,j=16wi,j(fifj)2

R 6 \R^6 R6表示一个 6 维的向量, a r g arg arg表示上面公式输出的是取得最小值的 f f f,如果没有前面的 a r g arg arg,则表示公式的输出为最小值

3. 拉普拉斯矩阵

在对目标函数进行进一步的分析前,我们先快速回忆一下线性代数中关于拉普拉斯矩阵的定义: L = D − W L = D-W L=DW,其中 D D D 为度矩阵,在无向图中,度矩阵是除主对角线外其他元素都为 0 的矩阵,主对角线上的值为到该点的边的权重之和,即:

d i , j = { d e g ( i ) i = j 0 i ≠ j d_{i,j} = \begin{cases}deg(i) & i=j\\ 0 & i \ne j\end{cases} di,j={deg(i)0i=ji̸=j

W W W 为邻接矩阵,如果存在从 i i i j j j 的有向边,那么 w i , j w_{i,j} wi,j 的值为有向边的权重,可以看出,在无向图中,邻接矩阵是一个对称矩阵;

下面是一个简单的拉普拉斯矩阵的例子:

度矩阵邻接矩阵拉普拉斯矩阵
《谱聚类算法入门教程(二)—— 构造谱聚类算法的目标函数》《谱聚类算法入门教程(二)—— 构造谱聚类算法的目标函数》《谱聚类算法入门教程(二)—— 构造谱聚类算法的目标函数》《谱聚类算法入门教程(二)—— 构造谱聚类算法的目标函数》

拉普拉斯矩阵有很多有用的性质:

  • 拉普拉斯矩阵是对称矩阵,这可以由D和W都是对称矩阵而得。
  • 由于拉普拉斯矩阵是对称矩阵,则它的所有的特征值都是实数
  • 拉普拉斯矩阵是半正定的,且对应的n个实数特征值都大于等于0,即 0 = λ 1 ≤ λ 2 ≤ . . . ≤ λ n 0=λ_1≤λ_2≤…≤λ_n 0=λ1λ2...λn, 且最小的特征值为0

由此,我们可以将原来的相似度矩阵作为邻接矩阵,然后做出它的度矩阵和拉普拉斯矩阵,这一点将在后面的转化中有重要作用。

4. 目标函数的转化

如何求解上面的目标函数,这是谱聚类算法的核心问题,我们首先将目标函数转化:

      a r g min ⁡ f ∈ R 6 ∑ i , j = 1 6 w i , j ( f i − f j ) 2 = ∑ i , j = 1 6 w i , j f i 2 ⎵ A − 2 ∑ i , j = 1 6 w i , j f i f j ⎵ B + ∑ i , j = 1 6 w i , j f j 2 ⎵ C \space \space \space \space \space arg \min \limits_{f \in \R^6} \displaystyle \sum_{i,j = 1}^{6}w_{i,j}(f_i-f_j)^2\\= \displaystyle \underbrace{\sum_{i,j = 1}^{6}w_{i,j}f_i^2}_{A} -\underbrace{2\sum_{i,j = 1}^{6}w_{i,j}f_if_j}_{B} + \underbrace{\sum_{i,j = 1}^{6}w_{i,j}f_j^2}_C      argfR6mini,j=16wi,j(fifj)2=A i,j=16wi,jfi2B 2i,j=16wi,jfifj+C i,j=16wi,jfj2

原来的公式被我们划分为 3 个部分,A 和 C 其实是一致的;

对于公式的第一部分 A A A

∑ i , j = 1 6 w i , j f i 2 = ∑ i = 1 6 ( w i , 1 f i 2 + w i , 2 f i 2 + . . . + w i , 6 f i 2 ) = ∑ i = 1 6 ( w i , 1 + w i , 2 + . . . + w i , 6 ) f i 2 \begin{aligned}\sum_{i,j = 1}^{6}w_{i,j}f_i^2 & = \sum_{i=1}^6(w_{i,1}f_i^2 + w_{i,2}f_i^2 + … + w_{i,6}f_i^2) \\ &= \sum_{i=1}^6(w_{i,1}+ w_{i,2}+ … + w_{i,6})f_i^2 \end{aligned} i,j=16wi,jfi2=i=16(wi,1fi2+wi,2fi2+...+wi,6fi2)=i=16(wi,1+wi,2+...+wi,6)fi2

根据度矩阵的定义,我们可以知道,括号中的值 ( w i , 1 + w i , 2 + . . . + w i , 6 ) (w_{i,1}+ w_{i,2}+ … + w_{i,6}) (wi,1+wi,2+...+wi,6)即为度矩阵 d i , i d_{i,i} di,i 的值

故原式可化为:

∑ i , j = 1 6 w i , j f i 2 = ∑ i = 1 6 d i , i f i 2 = d 1 , 1 f 1 2 + d 2 , 2 f 2 2 + . . . + d 6 , 6 f 6 2 \begin{aligned}\sum_{i,j = 1}^{6}w_{i,j}f_i^2 & = \sum_{i=1}^6 d_{i,i}f_i^2 \\ &=d_{1,1}f_1^2 + d_{2,2}f_2^2 + … + d_{6,6}f_6^2\end{aligned} i,j=16wi,jfi2=i=16di,ifi2=d1,1f12+d2,2f22+...+d6,6f62

我们考虑下面的式子:

f T D f = [ f 1 f 2 f 3 f 4 f 5 f 6 ] [ d 1 , 1 0 0 0 0 0 0 d 2 , 2 0 0 0 0 0 0 d 3 , 3 0 0 0 0 0 0 d 4 , 4 0 0 0 0 0 0 d 5 , 5 0 0 0 0 0 0 d 6 , 6 ] [ f 1 f 2 f 3 f 4 f 5 f 6 ] = [ f 1 f 2 f 3 f 4 f 5 f 6 ] [ f 1 d 1 , 1 f 2 d 2 , 2 f 3 d 3 , 3 f 4 d 4 , 4 f 5 d 5 , 5 f 6 d 6 , 6 ] = d 1 , 1 f 1 2 + d 2 , 2 f 2 2 + . . . + d 6 , 6 f 6 2 \begin{aligned}f^TDf & = \left[ \begin{matrix} f_1 & f_2 & f_3 & f_4 & f_5 & f_6 \end{matrix}\right] \left[ \begin{matrix} d_{1,1} & 0 & 0 & 0 & 0 & 0 \\ 0 & d_{2,2} &0&0&0&0\\0&0&d_{3,3}&0&0&0\\0&0&0&d_{4,4}&0&0\\0&0&0&0&d_{5,5}&0\\0&0&0&0&0&d_{6,6} \end{matrix} \right] \left[\begin{matrix}f_1 \\ f_2 \\ f_3 \\ f_4 \\ f_5 \\ f_6\end{matrix} \right] \\ &= \left[ \begin{matrix} f_1 & f_2 & f_3 & f_4 & f_5 & f_6 \end{matrix}\right] \left[\begin{matrix}f_1d_{1,1} \\ f_2d_{2,2} \\ f_3d_{3,3} \\ f_4d_{4,4} \\ f_5d_{5,5} \\ f_6d_{6,6}\end{matrix} \right] \\ &=d_{1,1}f_1^2 + d_{2,2}f_2^2 + … + d_{6,6}f_6^2\end{aligned} fTDf=[f1f2f3f4f5f6]d1,1000000d2,2000000d3,3000000d4,4000000d5,5000000d6,6f1f2f3f4f5f6=[f1f2f3f4f5f6]f1d1,1f2d2,2f3d3,3f4d4,4f5d5,5f6d6,6=d1,1f12+d2,2f22+...+d6,6f62

所以式子 A A A 就可以替换为为 f T D f f^TDf fTDf

上面说到 A A A C C C 实际上是等价的,所以我们有 A + C = 2 f T D f A + C = 2f^TDf A+C=2fTDf

对于公式的 B B B部分:

B 2 = ∑ i = 1 6 ∑ j = 1 6 w i , j f i f j = ∑ i = 1 6 f i ∑ j = 1 6 w i , j f j = ∑ i = 1 6 f i [ w i , 1 f 1 + w i , 2 f 2 + . . . + w i , 6 f 6 ] = ∑ i = 1 6 f i [ w i , 1 w i , 2 . . . w i , 6 ] [ f 1 f 2 ⋮ f 6 ] = ∑ i = 1 6 f i [ w i , 1 w i , 2 . . . w i , 6 ] f = [ f 1 [ w 1 , 1 w 1 , 2 . . . w 1 , 6 ] + f 2 [ w 2 , 1 w 2 , 2 . . . w 2 , 6 ] + . . . ] f = [ f 1 f 2 . . . f 6 ] [ w 1 , 1 w 1 , 2 w 1 , 3 w 1 , 4 w 1 , 5 w 1 , 6 w 2 , 1 w 2 , 2 w 2 , 3 w 2 , 4 w 2 , 5 w 2 , 6 w 3 , 1 w 3 , 2 w 3 , 3 w 3 , 4 w 3 , 5 w 3 , 6 w 4 , 1 w 4 , 2 w 4 , 3 w 4 , 4 w 4 , 5 w 4 , 6 w 5 , 1 w 5 , 2 w 5 , 3 w 5 , 4 w 5 , 5 w 5 , 6 w 6 , 1 w 6 , 2 w 6 , 3 w 6 , 4 w 6 , 5 w 6 , 6 ] f = f T W f \begin{aligned}\frac{B}{2} &= \displaystyle \sum_{i=1}^6\sum_{j=1}^6 w_{i,j}f_if_j \\ & = \displaystyle \sum_{i=1}^6f_i\sum_{j=1}^6w_{i,j}f_j \\ &= \displaystyle \sum_{i=1}^6 f_i [w_{i,1}f_1 + w_{i,2}f_2 + … + w_{i,6}f_6] \\ &= \displaystyle \sum_{i=1}^6 f_i [\begin{matrix}w_{i,1} & w_{i,2} & … & w_{i,6} \end{matrix} ] \left[\begin{matrix}f_1\\f_2\\ \vdots \\ f_6\end{matrix}\right]\\&= \displaystyle \sum_{i=1}^6 f_i \left[\begin{matrix}w_{i,1} & w_{i,2} & … & w_{i,6}\end{matrix}\right] f \\&= \displaystyle \left[f_1 \left[\begin{matrix}w_{1,1} & w_{1,2} & … & w_{1,6}\end{matrix}\right] + f_2 \left[\begin{matrix}w_{2,1} & w_{2,2} & … & w_{2,6}\end{matrix}\right] + …\right] f \\ &= \left[ \begin{matrix} f_1 & f_2 & … & f_6 \end{matrix} \right] \left[\begin{matrix} w_{1,1} & w_{1,2} & w_{1,3} & w_{1,4} & w_{1,5} &w_{1,6} \\ w_{2,1} & w_{2,2} & w_{2,3} & w_{2,4} & w_{2,5} &w_{2,6} \\ w_{3,1} & w_{3,2} & w_{3,3} & w_{3,4} & w_{3,5} &w_{3,6} \\ w_{4,1} & w_{4,2} & w_{4,3} & w_{4,4} & w_{4,5} &w_{4,6}\\ w_{5,1} & w_{5,2} & w_{5,3} & w_{5,4} & w_{5,5} &w_{5,6} \\ w_{6,1} & w_{6,2} & w_{6,3} & w_{6,4} & w_{6,5} &w_{6,6}\end{matrix}\right] f\\ & = f^T W f \end{aligned} 2B=i=16j=16wi,jfifj=i=16fij=16wi,jfj=i=16fi[wi,1f1+wi,2f2+...+wi,6f6]=i=16fi[wi,1wi,2...wi,6]f1f2f6=i=16fi[wi,1wi,2...wi,6]f=[f1[w1,1w1,2...w1,6]+f2[w2,1w2,2...w2,6]+...]f=[f1f2...f6]w1,1w2,1w3,1w4,1w5,1w6,1w1,2w2,2w3,2w4,2w5,2w6,2w1,3w2,3w3,3w4,3w5,3w6,3w1,4w2,4w3,4w4,4w5,4w6,4w1,5w2,5w3,5w4,5w5,5w6,5w1,6w2,6w3,6w4,6w5,6w6,6f=fTWf

B = 2 f T W f B = 2f^TWf B=2fTWf

此时我们可以发现:

min ⁡ f ∈ R 6 ∑ i , j = 1 6 w i , j ( f i − f j ) 2 = min ⁡ f ∈ R 6 2 f T ( D − W ) f = min ⁡ f ∈ R 6 2 f T L f \min \limits_{f \in \R^6} \displaystyle \sum_{i,j = 1}^{6}w_{i,j}(f_i-f_j)^2 = \min \limits_{f \in \R^6} 2f^T(D-W)f =\min \limits_{f \in \R^6} 2f^TLf fR6mini,j=16wi,j(fifj)2=fR6min2fT(DW)f=fR6min2fTLf

可是,,,转化为上面的式子又该怎么求啊,这是下一篇该讲的内容了,不过这里给一个小剧透:

f T L f f^TLf fTLf进行求导,然后取导数的极点,此时我们知道在这个点函数取得极值,然后我们会发现这个极值是最小值,具体的内容就看下一篇博客吧,逃。。。

  1. 矩阵转置-维基百科 ↩︎

    原文作者:聚类算法
    原文地址: https://blog.csdn.net/qiuxy23/article/details/82873020
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞