谱聚类(Spectral Clustering)
本文技术来自“ A Tutorial on Spectral Clustering ”:
- 最近用到了谱聚类算法,在对谱聚类有了初步的了解之后打算写下这片文章作为笔记。
定义
- 无向图 G=<V,E> :V是由数据集构成的图的顶点;E为每条边的权值,也就是顶点之间的相似度,换句话说E是每两个数据集之间的相似度。
- 相似度矩阵。计算相似度,计算顶点之间的相似度。想用什么距离判断方法就用什么,只要符合数据的性质即可,如Nearest neighbors、高斯核函数等等。
- 邻接矩阵
W
(Adjacency Matrix):子图
A 和子图 B 之间所有边的权值之和(ωij为顶点i到顶点j的权值,如果两个点不相邻,权值为0 ):
W(A,B)=∑i∈A,j∈Bωij
度矩阵(Degree Matrix) D :与顶点
vi 相连的所有边的权值累加和为该顶点的 d (Degree),由所有顶点v 构成的 d 组合成度矩阵D (Degree Matrix):
di=∑j=1nωij
A Tutorial on Spectral Clustering 这片文章里称为 Degree Matrix,是图论里的概念,我不知道翻译为度矩阵是否准确。Laplacian 矩阵 L :
L=D−W -
Laplacian矩阵性质为:
f′Lf=12∑i,j=1Nωij(fi−fj)2,
其中 f 为任意向量,L=D−W,W(A,B)=∑i∈A,j∈Bωij,di=∑nj=1ωij
证明过程:
f′Lf=f′Df−f′Wf=12(∑i=1ndif2i−2∑i,j=1nfifjωij−∑j=1ndif2j)=12∑i,j=1Nωij(fi−fj)2
谱聚类原理
目的:给定数据集 X ,转化为图
G=<V,E> ,将图 G 划分为k个子图,使分割后的k个子图中各个子图之间顶点V 的相似度低,同一子图内顶点 V 的相似度高。分割方法:
RatioCut (first introduced by Hagen and Kahng, 1992)
NormalizedCut (first introduced by Shi and Malik, 2000)RatioCut
1 确定目标函数
假设由数据集得到图 G ,我们要把图
G 划分为 k 个子集,记做Ai,...,Ak ,为了使分割后的 k 个子图中各个子图之间顶点V 的相似度尽可能低,同一子图内顶点 V 的相似度尽可能高,得目标函数:
cut(Ai,...,Ak)=12∑i=1kW(Ai,Ai⎯⎯⎯⎯)
Ai 表示第 i 个子图,Ai⎯⎯⎯⎯ 为 Ai 的补集, W(Ai,Ai⎯⎯⎯⎯) 表示子图 Ai 与其他所有子图(即 Ai⎯⎯⎯⎯ )之间的所有边的权重之和(换言之,如果要分成 k 个组,那么其代价就是进行分割时去掉的边的权值的总和)。我们要最小化目标函数:
mincut(Ai,...,Ak)=min(12∑i=1kW(Ai,Ai⎯⎯⎯⎯))
此时有个问题:假设 k=2 ,目标函数 cut() 有可能会将图分成一个点和 n−1 个点的集合(即{ H },{A,B,C,D,E,F,G }),但{ A,B,C,H }, { D,E,F,G }反而是更理想的结果。(如下图所示)
图片来自http://www.cnblogs.com/sparkwen/p/3155850.html针对上面问题,改进后的目标函数为:
RatioCut(Ai,...,Ak)=12∑i=1kW(Ai,Ai⎯⎯⎯⎯)|Ai⎯⎯⎯⎯|=12∑i=1kcut(Ai,Ai⎯⎯⎯⎯)|Ai⎯⎯⎯⎯|
其中|Ai⎯⎯⎯⎯|为子图Ai中顶点V的个数。
RatioCut 的原理很简单:如果某一子图中包含的顶点个数越少,那么该图的值就越大。也就解决了上述问题。2 最小化目标函数
定义向量 fi=⎧⎩⎨⎪⎪⎪⎪|Ai⎯⎯⎯||Ai|‾‾‾√,−|Ai⎯⎯⎯||Ai|‾‾‾√,if vi∈A if vi∈A⎯⎯⎯
由 Laplacian 矩阵性质 f′Lf=12∑Ni,j=1ωi,j(fi−fj)2得:
f′Lf⇒2|V|⋅RatioCut(A,A⎯⎯⎯)
证明过程:
f′Lf=12∑i,j=1Nωi,j(fi−fj)2=12⎛⎝⎜⎜⎜∑i∈A,j∈A⎯⎯ωij⎛⎝⎜⎜|A⎯⎯⎯||A|‾‾‾√+|A||A⎯⎯⎯|‾‾‾√⎞⎠⎟⎟2+∑i∈A,j∈A⎯⎯ωij⎛⎝⎜⎜−|A⎯⎯⎯||A|‾‾‾√−|A||A⎯⎯⎯|‾‾‾√⎞⎠⎟⎟2⎞⎠⎟⎟⎟=cut(A,A⎯⎯⎯)(|A⎯⎯⎯||A|+|A||A⎯⎯⎯|+2)=cut(A,A⎯⎯⎯)(|A⎯⎯⎯|+|A||A|+|A⎯⎯⎯|+|A||A⎯⎯⎯|+2)=2|V|⋅RatioCut(A,A⎯⎯⎯)
大致上我们可得:
minRatioCut(A,A⎯⎯⎯)⇒minf′Lf⇒minL⇒minλ
即求得 Laplacian 矩阵的最小特征值 λ ,但 Laplacian 矩阵是半正定矩阵,最小特征值 λ 为 0 ,则根据 Rayleigh-Ritz 定理(e.g., see Section 5.5.2. of L¨utkepohl, 1997)取第二小特征值即可。具体推导内容请看 A Tutorial on Spectral Clustering (https://arxiv.org/abs/0711.0189)
聚类过程
1 根据数据集构建图G=<V,E> - 2 min RatioCut将图G分割为k个子图
- 3 求得邻接矩阵W、度矩阵(DegreeMatrix)D,得到Laplacian矩阵L
- 4 求L的前K个特征值及对应的特征向量(由小到大排列)
- 5 把k个特征向量组成shape=N∗k矩阵
- 6 用k−means对矩阵进行聚类
也就是利用拉普拉斯矩阵的特征值分析再利用 k-means 算法进行聚类。
代码
scikit 有相应的包:sklearn.cluster.SpectralClustering
# -*- coding: utf-8 -*- from sklearn import cluster spectral = cluster.SpectralClustering(n_clusters=CLUSTER_NUM, eigen_solver='arpack', affinity="nearest_neighbors").fit(data) spectral.labels_ # 得到列表,内容为 data 所对应簇的下标
具体内容请看官方文档:sklearn.cluster.SpectralClustering
Reference
[1]:Luxburg U V. A tutorial on spectral clustering[J]. Statistics & Computing, 2007, 17(4):395-416.
[2]:http://www.cnblogs.com/fengyan/archive/2012/06/21/2553999.html
[3]:http://www.cnblogs.com/sparkwen/p/3155850.html
[4]:http://blog.csdn.net/liu1194397014/article/details/52990015