引入
聚类算法一般可以分为两类:
Compactness。代表的算法有 K-means,GMM 等。但这类算法只能处理凸集,为了处理非凸的样本集,必须引⼊核技巧。
Connectivity。这类以 spectral clustering 为代表。
举个例子,将下述数据采用聚类算法进行聚类,可以采用 GMM 或 K-Means 的方法:
然而对于下述数据却并不能使用上述两种算法:
此时可以考虑采用谱聚类(spectral clustering)的方法。
谱聚类算法(Spectral Clustering)
主要思想是把所有的数据看做空间中的点,这些点之间可以用边连接起来。距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高,通过对所有数据点组成的图进行切图,让切图后不同的子图间边权重和尽可能的低,而子图内的边权重和尽可能的高,从而达到聚类的目的。
1 基础知识
1.1 无向带权图
对于一个图 G G ,一般用 V V 代表点的集合 和用 E E 来描述边的集合。则 G ( V , E ) G ( V , E ) 。其中, V = ( v 1 , v 2 , . . . v n ) V = ( v 1 , v 2 , . . . v n ) 。对于 V V 中的任意两个点,可以有边连接,也可以没有边连接。定义权重 w i j w i j 为点 v i v i 和点 v j v j 之间的权重。对于无向图,有 w i j = w j i w i j = w j i 。
权重:对于有边相连的两个点 v i v i 和 v j v j ,有 w i j > 0 w i j > 0 , 对于没有边连接的两个点 v i v i 和 v j v j ,w i j = 0 w i j = 0 。
度:对于图中的任意一个点 v i v i ,它的度 d i d i 定义为和它相连的所有边的权重之和,即 :
d i = n ∑ j = 1 w i j d i = ∑ j = 1 n w i j
利用节点的权重值,可以得到图的邻接矩阵 W W ,是一个 n × n n × n 的矩阵,第 i i 行的第 j j 个值对应的权重为 w i j w i j 。
除此之外,对于点集 V V 的的一个子集 A ⊂ V A ⊂ V ,我们定义:
| A | := 子 集 A 中 点 的 个 数 | A | := 子 集 A 中 点 的 个 数
v o l ( A ) := ∑ i ∈ A d i v o l ( A ) := ∑ i ∈ A d i
利用每个节点的度,可以得到一个 n × n n × n 的度矩阵 D D ,它是一个对角矩阵,只有主对角线有值,对应第 i i 行的第 i 个 i 个 点的度数,定义如下:
D = ⎛ ⎜
⎜
⎜
⎜
⎜ ⎝ d 1 … … … d 2 … ⋮ ⋮ ⋱ … … d n ⎞ ⎟
⎟
⎟
⎟
⎟ ⎠ D = ( d 1 … … … d 2 … ⋮ ⋮ ⋱ … … d n )
1.2 相似矩阵
一般情况下,邻接矩阵 W W ,通常可以自己输入权重,但在谱聚类中,我们只有数据点的定义,并没有直接给出这个邻接矩阵,那么怎么得到这个邻接矩阵呢?
基本思想:距离较远的两个点之间的边权重值较低,而距离较近的两个点之间的边权重值较高。一般来说,可以通过样本点距离度量的相似矩阵 S S 来获得邻接矩阵 W W 。
构建邻接矩阵 W W 的方法有三类:
ϵ ϵ - 邻近法
K K 邻近法
全连接法
1.2.1 ϵ ϵ -邻近法
首先,设置一个距离阈值 ϵ ϵ ,然后用欧式距离 s i j s i j 度量任意两点 x i x i 和 x j x j 的距离。即相似矩阵的 s i j = | | x i − x j | | 2 2 s i j = | | x i − x j | | 2 2 ,然后根据 s i j s i j 和 ϵ ϵ 的大小关系,来定义邻接矩阵 W W 如下:
w i j = { 0 s i j > ϵ ϵ s i j ≤ ϵ w i j = { 0 s i j > ϵ ϵ s i j ≤ ϵ
从上式可见,两点间的权重要不是 ϵ ϵ ,要不就是 0 0 。显然这很难精确区分每个点之间的距离大小。所以很少使用 ϵ ϵ - 邻近法。
1.2.2 K K 邻近法
基本思想:利用 KNN 算法遍历所有的样本点,取每个样本最近的 k k 个点作为近邻,只有和样本距离最近的 k k 个点之间的 w i j > 0 w i j > 0 。
但是这种方法会造成重构之后的邻接矩阵 W W 非对称,且后面的算法需要对称邻接矩阵。为解决这种问题,一般采取下面两种方法之一:
Method1: 第一种 K K 邻近法是只要一个点在另一个点的 K K 近邻中,则保留 s i j s i j :
w i j = w j i = { 0 x i ∉ K N N ( x j ) a n d x j ∉ K N N ( x i ) e x p ( − | | x i − x j | | 2 2 2 σ 2 ) x i ∈ K N N ( x j ) o r x j ∈ K N N ( x i ) w i j = w j i = { 0 x i ∉ K N N ( x j ) a n d x j ∉ K N N ( x i ) e x p ( − | | x i − x j | | 2 2 2 σ 2 ) x i ∈ K N N ( x j ) o r x j ∈ K N N ( x i )
Method2: 第二种 K K 邻近法是必须两个点互为 K K 近邻中,才保留 s i j s i j
w i j = w j i = { 0 x i ∉ K N N ( x j ) o r x j ∉ K N N ( x i ) e x p ( − | | x i − x j | | 2 2 2 σ 2 ) x i ∈ K N N ( x j ) a n d x j ∈ K N N ( x i ) w i j = w j i = { 0 x i ∉ K N N ( x j ) o r x j ∉ K N N ( x i ) e x p ( − | | x i − x j | | 2 2 2 σ 2 ) x i ∈ K N N ( x j ) a n d x j ∈ K N N ( x i )
1.2.3 全连接法
相比前两种方法,第三种方法所有的点之间的权重值都大于 0 0 ,因此称之为全连接法。
基本思想:选择不同的核函数来定义边权重,常用的有多项式核函数 ,高斯核函数 和 Sigmoid 核函数 。
最常用的是高斯核函数RBF,此时相似矩阵和邻接矩阵相同:
w i j = s i j = e x p ( − | | x i − x j | | 2 2 2 σ 2 ) w i j = s i j = e x p ( − | | x i − x j | | 2 2 2 σ 2 )
在实际的应用中,使用第三种全连接法来建立邻接矩阵是最普遍的,而在全连接法中使用高斯径向核 RBF 是最普遍的。
2 拉普拉斯矩阵
拉普拉斯矩阵 L = D − W L = D − W 。D D 即为度矩阵,它是一个对角矩阵。而 W W 即为 邻接矩阵。(参考《图神经网络基础二:谱图理论》 )
举例:
普拉斯矩阵的性质如下:
1、 拉普拉斯矩阵是 对称矩阵;
2、 L L 的行和为零 ;
3、 L L 有一个特征值为零 ;
4、L L 是半正定矩阵 ;
5、 对于任意向量 f f ,有:
f T L f = 1 2 N ∑ i = 1 N ∑ j = 1 w i j ( f i − f j ) 2 f T L f = 1 2 ∑ i = 1 N ∑ j = 1 N w i j ( f i − f j ) 2
这一性质利用拉普拉斯矩阵的性质很容易可以得到:
f T L f = f T D f − f T W f = N ∑ i = 1 d i f 2 i − N ∑ i = 1 N ∑ j = 1 w i j f i f j = 1 2 ( N ∑ i = 1 d i f 2 i − 2 N ∑ i = 1 N ∑ j = 1 w i j f i f j + N ∑ j = 1 d j f 2 j ) = 1 2 ( N ∑ i = 1 N ∑ j = 1 w i j f 2 i − 2 N ∑ i = 1 N ∑ j = 1 w i j f i f j + N ∑ i = 1 N ∑ j = 1 w i j f 2 j ) = 1 2 N ∑ i = 1 N ∑ j = 1 w i j ( f i − f j ) 2 f T L f = f T D f − f T W f = ∑ i = 1 N d i f i 2 − ∑ i = 1 N ∑ j = 1 N w i j f i f j = 1 2 ( ∑ i = 1 N d i f i 2 − 2 ∑ i = 1 N ∑ j = 1 N w i j f i f j + ∑ j = 1 N d j f j 2 ) = 1 2 ( ∑ i = 1 N ∑ j = 1 N w i j f i 2 − 2 ∑ i = 1 N ∑ j = 1 N w i j f i f j + ∑ i = 1 N ∑ j = 1 N w i j f j 2 ) = 1 2 ∑ i = 1 N ∑ j = 1 N w i j ( f i − f j ) 2
对于上面的性质5,如果 f f 为网络中信号的值的向量,那么 f T L f f T L f 称为图信号的总变差 (Total Variation),可以刻画图信号整体的平滑度
3 无向图切图
对于无向图 G G 的切图,目标是将图 G ( V , E ) G ( V , E ) 切成相互没有连接的 k k 个子图,每个子图点集合为:A 1 , A 2 , . . A k A 1 , A 2 , . . A k ,它们满足 A i ∩ A j = ∅ A i ∩ A j = ∅ ,且A 1 ∪ A 2 ∪ . . . ∪ A k = V A 1 ∪ A 2 ∪ . . . ∪ A k = V 。
对于任意两个子图点集合 A , B ⊂ V A , B ⊂ V ,A ∩ B = ∅ A ∩ B = ∅ ,我们定义 A A 和 B B 之间的切图权重为:
W ( A , B ) = ∑ i ∈ A , j ∈ B w i j W ( A , B ) = ∑ i ∈ A , j ∈ B w i j
那么对于 k k 个子图点的集合:A 1 , A 2 , . . A k A 1 , A 2 , . . A k ,定义切图cut为:
c u t ( A 1 , A 2 , . . . A k ) = 1 2 k ∑ i = 1 W ( A i , ¯ ¯¯ ¯ A i ) c u t ( A 1 , A 2 , . . . A k ) = 1 2 ∑ i = 1 k W ( A i , A ¯ i )
其中 ¯ ¯¯ ¯ A i A ¯ i 为 A i A i 的补集,意为除 A i A i 子集外其他 V V 的子集的并集。
每个子图就相当于聚类的一个类,找到子图内点的权重之和最高,子图间的点的权重之和最低的切图就相当于找到了最佳的聚类。实现这一点的一个很自然的想法是最小化 c u t c u t 。然而这种方法存在问题,也就是最小化的 c u t c u t 对应的切图不一定就是符合要求的最优的切图,如下图:
在上面的例子中,我们选择一个权重最小的边缘的点,比如 C C 和 H H 之间进行 c u t c u t ,这样可以最小化 c u t ( A 1 , A 2 , . . . A k ) c u t ( A 1 , A 2 , . . . A k ) ,但是却不是最优的切图,如何避免这种切图,并且找到类似图中 "Best Cut" 这样的最优切图呢?
接下介绍谱聚类使用的切图方法。
4 谱聚类之切图聚类
为避免最小切图导致的切图效果不佳,需要对每个子图的规模做出限定,一般来说,有两种切图方式,
第一种是 RatioCut
第二种是 Ncut
4.1 RatioCut 切图
RatioCut 切图为避免上述的最小切图,对每个切图,不光考虑最小化 c u t ( A 1 , A 2 , . . . A k ) c u t ( A 1 , A 2 , . . . A k ) ,还考虑最大化每个子图点的个数,即:
R a t i o C u t ( A 1 , A 2 , . . . A k ) = 1 2 k ∑ i = 1 W ( A i , ¯ ¯¯ ¯ A i ) | A i | R a t i o C u t ( A 1 , A 2 , . . . A k ) = 1 2 ∑ i = 1 k W ( A i , A ¯ i ) | A i |
为最小化这个 RatioCut 函数,引入指示向量 h j ∈ { h 1 , h 2 , . . h k } j = 1 , 2 , . . . k h j ∈ { h 1 , h 2 , . . h k } j = 1 , 2 , . . . k ,对于任意一个向量 h j h j , 它是一个 n n 维向量(n n 为样本数),定义 h i j h i j 为:
h i j = { 0 v i ∉ A j 1 √ | A j | v i ∈ A j h i j = { 0 v i ∉ A j 1 | A j | v i ∈ A j
定义 h T i L h i h i T L h i 为:
h T i L h i = 1 2 ∑ m = 1 ∑ n = 1 w m n ( h i m − h i n ) 2 = 1 2 ( ∑ m ∈ A i , n ∉ A i w m n ( 1 √ | A i | − 0 ) 2 + ∑ m ∉ A i , n ∈ A i w m n ( 0 − 1 √ | A i | ) 2 = 1 2 ( ∑ m ∈ A i , n ∉ A i w m n 1 | A i | + ∑ m ∉ A i , n ∈ A i w m n 1 | A i | = 1 2 ( c u t ( A i , ¯ ¯¯ ¯ A i ) 1 | A i | + c u t ( ¯ ¯¯ ¯ A i , A i ) 1 | A i | ) = c u t ( A i , ¯ ¯¯ ¯ A i ) | A i | h i T L h i = 1 2 ∑ m = 1 ∑ n = 1 w m n ( h i m − h i n ) 2 = 1 2 ( ∑ m ∈ A i , n ∉ A i w m n ( 1 | A i | − 0 ) 2 + ∑ m ∉ A i , n ∈ A i w m n ( 0 − 1 | A i | ) 2 = 1 2 ( ∑ m ∈ A i , n ∉ A i w m n 1 | A i | + ∑ m ∉ A i , n ∈ A i w m n 1 | A i | = 1 2 ( c u t ( A i , A ¯ i ) 1 | A i | + c u t ( A ¯ i , A i ) 1 | A i | ) = c u t ( A i , A ¯ i ) | A i |
可以看出,对于某一个子图 i i ,它的 RatioCut 对应于 h T i L h i h i T L h i ,那么 k k 个子图呢?对应的 RatioCut 函数表达式为:
R a t i o C u t ( A 1 , A 2 , … A k ) = k ∑ i = 1 h T i L h i = k ∑ i = 1 ( H T L H ) i i = tr ( H T L H ) R a t i o C u t ( A 1 , A 2 , … A k ) = ∑ i = 1 k h i T L h i = ∑ i = 1 k ( H T L H ) i i = tr ( H T L H )
上式中 tr ( H T L H ) tr ( H T L H ) 为矩阵 H T L H H T L H 的迹, H = ( h 1 h 2 ⋯ h k ) H = ( h 1 h 2 ⋯ h k ) ,需要注意这里 的 H H 满足 H T H = I H T H = I ,并且 H H 的元素只能取 0 0 或者 1 | A i | 1 | A i | 。
所以我们需要优化以下目标函数:
argmin H tr ( H T L H ) s.t. H T H = I argmin H tr ( H T L H ) s.t. H T H = I
注意到 H H 矩阵里面的每一个指示向量都是 n n 维的,向量中每个变量的取值为 0 0 或者 1 √ | A j | 1 | A j | ,就有 2 n 2 n 种取值,有 k k 个子图的话就有 k k 个指示向量,共有 k 2 n k 2 n 种 H H ,因此找到满足上面优化目标的 H H 是一个 N P N P 难的问题。
观察到 t r ( H T L H ) t r ( H T L H ) 中每一个优化子目标 h T i L h i h i T L h i ,其中 h h 是单位正交基, L L 为对称矩阵,此时 h T i L h i h i T L h i 的最大值为 L L 的最大特征值,最小值是 L L 的最小特征值。类比于 PCA ,我们的目标是找到协方差矩阵(对应此处的拉普拉斯矩阵 L L )的最大的特征值,而在我们的谱聚类中,我们的目标是找到目标的最小的特征值,得到对应的特征向量,此时对应二分切图效果最佳。也就是说,我们这里要用到维度规约的思想来近似去解决这个NP难的问题。
对于 h T i L h i h i T L h i ,我们的目标是找到最小的 L L 的特征值,而对于 t r ( H T L H ) = k ∑ i = 1 h T i L h i t r ( H T L H ) = ∑ i = 1 k h i T L h i ,则我们的目标就是找到 k k 个最小的特征值,一般来说,k k 远远小于 n n ,也就是说,此时我们进行了维度规约,将维度从 n n 降到了 k k ,从而近似可以解决这个NP难的问题。
通过找到 L L 的最小的 k k 个特征值,可以得到对应的 k k 个特征向量,这 k k 个特征向量组成一个 n x k n x k 维度的矩阵,即为我们的 H H 。一般需要对 H H 矩阵按行做标准化,即
h ∗ i j = h i j ( k ∑ t = 1 h 2 i t ) 1 / 2 h i j ∗ = h i j ( ∑ t = 1 k h i t 2 ) 1 / 2
由于我们在使用维度规约的时候损失了少量信息,导致得到的优化后的指示向量 h h 对应的 H H 现在不能完全指示各样本的归属,因此一般在得到 n × k n × k 维度的矩阵 H H 后还需要对每一行进行一次传统的聚类,比如使用 K-Means 聚类。
4.2 Ncut 切图
Ncut 切图和 RatioCut 切图很类似,但是把 Ratiocut 的分母 | A i | | A i | 换成 v o l ( A i ) v o l ( A i ) 。由于子图样本的个数多并不一定权重就大,我们切图时基于权重也更合我们的目标,因此一般来说 Ncut 切图优于 RatioCut 切图。 N C u t ( A 1 , A 2 , . . . A k ) = 1 2 k ∑ i = 1 W ( A i , ¯ ¯¯ ¯ A i ) v o l ( A i ) N C u t ( A 1 , A 2 , . . . A k ) = 1 2 ∑ i = 1 k W ( A i , A ¯ i ) v o l ( A i )
对应的,Ncut 切图对指示向量 h h 做了改进。注意到 RatioCut 切图的指示向量使用的是 1 √ | A j | 1 | A j | 标示样本归属,而 Ncut 切图使用了子图权重 1 √ v o l ( A j ) 1 v o l ( A j ) 来标示指示向量 h h ,定义如下:
h i j = { 0 v i ∉ A j 1 √ v o l ( A j ) v i ∈ A j h i j = { 0 v i ∉ A j 1 v o l ( A j ) v i ∈ A j
那么我们对于 h T i L h i h i T L h i 有:
h T i L h i = 1 2 ∑ m = 1 ∑ n = 1 w m n ( h i m − h i n ) 2 = 1 2 ( ∑ m ∈ A i , n ∉ A i w m n ( 1 √ v o l ( A i ) − 0 ) 2 + ∑ m ∉ A i , n ∈ A i w m n ( 0 − 1 √ v o l ( A i ) ) 2 = 1 2 ( ∑ m ∈ A i , n ∉ A i w m n 1 v o l ( A i ) + ∑ m ∉ A i , n ∈ A i w m n 1 v o l ( A i ) = 1 2 ( c u t ( A i , ¯ ¯¯ ¯ A i ) 1 v o l ( A i ) + c u t ( ¯ ¯¯ ¯ A i , A i ) 1 v o l ( A i ) ) = c u t ( A i , ¯ ¯¯ ¯ A i ) v o l ( A i ) h i T L h i = 1 2 ∑ m = 1 ∑ n = 1 w m n ( h i m − h i n ) 2 = 1 2 ( ∑ m ∈ A i , n ∉ A i w m n ( 1 v o l ( A i ) − 0 ) 2 + ∑ m ∉ A i , n ∈ A i w m n ( 0 − 1 v o l ( A i ) ) 2 = 1 2 ( ∑ m ∈ A i , n ∉ A i w m n 1 v o l ( A i ) + ∑ m ∉ A i , n ∈ A i w m n 1 v o l ( A i ) = 1 2 ( c u t ( A i , A ¯ i ) 1 v o l ( A i ) + c u t ( A ¯ i , A i ) 1 v o l ( A i ) ) = c u t ( A i , A ¯ i ) v o l ( A i )
推导方式和 RatioCut 完全一致。也就是说,我们的优化目标仍然是
NCut ( A 1 , A 2 , ⋯ , A k ) = k ∑ i = 1 h T i L h i = k ∑ i = 1 ( H T L H ) i i = tr ( H T L H ) NCut ( A 1 , A 2 , ⋯ , A k ) = ∑ i = 1 k h i T L h i = ∑ i = 1 k ( H T L H ) i i = tr ( H T L H )
但是此时我们的 H T H ≠ I H T H ≠ I ,而是 H T D H = I H T D H = I 。推导如下:
H T D H = ⎛ ⎜
⎜
⎜
⎜
⎜ ⎝ h T 1 h T 2 ⋮ h T k ⎞ ⎟
⎟
⎟
⎟
⎟ ⎠ ⎛ ⎜
⎜
⎜
⎜
⎜ ⎝ d 1 d 2 ⋱ d N ⎞ ⎟
⎟
⎟
⎟
⎟ ⎠ ( h 1 h 2 ⋯ h k ) = ⎛ ⎜
⎜
⎜
⎜
⎜ ⎝ h 11 d 1 h 12 d 2 ⋯ h 1 N d N h 21 d 1 h 22 d 2 ⋯ h 2 N d N ⋮ ⋮ ⋱ ⋮ h k 1 d 1 h k 2 d 2 ⋯ h k N d N ⎞ ⎟
⎟
⎟
⎟
⎟ ⎠ ( h 1 h 2 ⋯ h k ) = ⎛ ⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜
⎜ ⎝ N ∑ i = 1 h 2 1 i d i N ∑ i = 1 h 1 i h 2 i d i ⋯ N ∑ i = 1 h 1 i h k i j d i N ∑ i = 1 h 2 i h 1 i d i N ∑ i = 1 h 2 2 i d i ⋯ N ∑ i = 1 h 2 i h k i d i ⋮ ⋮ ⋱ ⋮ N ∑ i = 1 h k i h 1 i d i N ∑ i = 1 h k i h 2 i d i ⋯ N ∑ i = 1 h 2 k i d i ⎞ ⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟
⎟ ⎠ H T D H = ( h 1 T h 2 T ⋮ h k T ) ( d 1 d 2 ⋱ d N ) ( h 1 h 2 ⋯ h k ) = ( h 11 d 1 h 12 d 2 ⋯ h 1 N d N h 21 d 1 h 22 d 2 ⋯ h 2 N d N ⋮ ⋮ ⋱ ⋮ h k 1 d 1 h k 2 d 2 ⋯ h k N d N ) ( h 1 h 2 ⋯ h k ) = ( ∑ i = 1 N h 1 i 2 d i ∑ i = 1 N h 1 i h 2 i d i ⋯ ∑ i = 1 N h 1 i h k i j d i ∑ i = 1 N h 2 i h 1 i d i ∑ i = 1 N h 2 i 2 d i ⋯ ∑ i = 1 N h 2 i h k i d i ⋮ ⋮ ⋱ ⋮ ∑ i = 1 N h k i h 1 i d i ∑ i = 1 N h k i h 2 i d i ⋯ ∑ i = 1 N h k i 2 d i )
对于对角线元素
h T i D h i = n ∑ j = 1 h 2 i j d j = 1 v o l ( A i ) ∑ j ∈ A i d j = 1 v o l ( A i ) v o l ( A i ) = 1 h i T D h i = ∑ j = 1 n h i j 2 d j = 1 v o l ( A i ) ∑ j ∈ A i d j = 1 v o l ( A i ) v o l ( A i ) = 1
由于 h m i h m i 和 h n i h n i 不可能同时非零 (v i ∈ V m a n d v i ∈ V n v i ∈ V m a n d v i ∈ V n ),因此对于非对角线元素有:
N ∑ i = 1 h m i h n i d i = N ∑ i = 1 0 ⋅ d i = 0 ∑ i = 1 N h m i h n i d i = ∑ i = 1 N 0 ⋅ d i = 0
此时我们的优化目标最终为:
a r g m i n H t r ( H T L H ) s . t . H T D H = I a r g m i n H t r ( H T L H ) s . t . H T D H = I
此时我们的 H H 中的指示向量 h h 并不是标准正交基,所以在 RatioCut里面的降维思想不能直接用。怎么办呢?其实只需要将指示向量矩阵 H H 做一个小小的转化即可。
我们令H = D − 1 / 2 F H = D − 1 / 2 F , 则:
H T L H = F T D − 1 / 2 L D − 1 / 2 F H T L H = F T D − 1 / 2 L D − 1 / 2 F
H T D H = F T F = I H T D H = F T F = I
此时优化目标为:
a r g m i n F tr ( F T D − 1 / 2 L D − 1 / 2 F ) s.t. F T F = I a r g m i n F tr ( F T D − 1 / 2 L D − 1 / 2 F ) s.t. F T F = I
可以发现这个式子和 RatioCut 基本一致,只是中间的 L L 变成了 D − 1 / 2 L D − 1 / 2 D − 1 / 2 L D − 1 / 2 。这样我们就可以继续按照RatioCut的思想,求出 D − 1 / 2 L D − 1 / 2 D − 1 / 2 L D − 1 / 2 的最小的前 k k 个特征值,然后求出对应的特征向量,并标准化,得到最后的特征矩阵 F F ,最后对 F F 进行一次传统的聚类(比如K-Means)即可。
一般来说, D − 1 / 2 L D − 1 / 2 D − 1 / 2 L D − 1 / 2 相当于对拉普拉斯矩阵 L L 做了一次标准化,即
( D − 1 / 2 L D − 1 / 2 ) i j = L i j √ d i ∗ d j ( D − 1 / 2 L D − 1 / 2 ) i j = L i j d i ∗ d j
5 谱聚类算法流程
5.1 Ncut 谱聚类算法流程
下面 Ncut 谱聚类算法流程。
输入:样本集D=( x 1 , x 2 , . . . , x n ) ( x 1 , x 2 , . . . , x n ) ,相似矩阵的生成方式, 降维后的维度k 1 k 1 , 聚类方法,聚类后的维度k 2 k 2
输出: 簇划分C ( c 1 , c 2 , . . . c k 2 ) C ( c 1 , c 2 , . . . c k 2 ) .
根据输入的相似矩阵的生成方式构建样本的相似矩阵 S S ;
根据相似矩阵 S S 构建邻接矩阵 W W ,构建度矩阵 D D ;
计算出拉普拉斯矩阵 L L ;
构建标准化后的拉普拉斯矩阵D − 1 / 2 L D − 1 / 2 D − 1 / 2 L D − 1 / 2 ;
计算D − 1 / 2 L D − 1 / 2 D − 1 / 2 L D − 1 / 2 最小的 k 1 k 1 个特征值所各自对应的特征向量 f f ;
将各自对应的特征向量f f 组成的矩阵按行标准化,最终组成 n × k 1 n × k 1 维的特征矩阵 F F ;
对 F F 中的每一行作为一个k 1 k 1 维的样本,共 n n 个样本,用输入的聚类方法进行聚类,聚类维数为k 2 k 2 ;
得到簇划分C ( c 1 , c 2 , . . . c k 2 ) C ( c 1 , c 2 , . . . c k 2 ) .
5.2 谱聚类算法的优缺点
谱聚类算法的主要优点有:
谱聚类只需要数据之间的相似度矩阵,因此对于处理稀疏数据的聚类很有效。这点传统聚类算法比如K-Means很难做到
由于使用了降维,因此在处理高维数据聚类时的复杂度比传统聚类算法好。
谱聚类算法的主要缺点有:
如果最终聚类的维度非常高,则由于降维的幅度不够,谱聚类的运行速度和最后的聚类效果均不好。
聚类效果依赖于相似矩阵,不同的相似矩阵得到的最终聚类效果可能很不同。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix