【机器学习】谱聚类(Spectral Clustering)
疑问
谱聚类的概念
谱聚类是一种针对图结构的聚类方法,将每个点都看作是一个图结构上的点,所以,判断两个点是否属于同一类的依据就是,两个点在图结构上是否有边相连,可以是直接相连也可以是间接相连。本质上就是一个图切割问题。
什么是谱(Spectral )
谱(spectral)就是指矩阵的特征值
那么谱与图的联系究竟是什么
首先我们知道 图结构 可以用邻接矩阵 / 相似矩阵来表示,通过矩阵就能清楚图的结构信息,具体是怎么建立联系的,我们接下来一步一步分析。
一、问题描述
假设有nnn个实数样本数据如下,每个样本有ddd维,目标是要聚ccc个类,并且数据分布并非云团。
X={x1d,x2d,…,xnd}T,X∈Rn×dX=\left\{x_{1}^{d}, x_{2}^{d}, \ldots, x_{n}^{d}\right\}^{T}, \quad X \in R^{n \times d} X={x1d,x2d,…,xnd}T,X∈Rn×d
二、构造图结构
在图论中我们常用邻接矩阵W表示图(无向图是为了保证邻接矩阵是对称矩阵),因此我们只需按某个准则来计算数据点对之间的距离即可获得数据点的邻接矩阵。
W=[w11w12w13w21w22w23w31w32w33]W=\left[\begin{array}{lll} w_{11} & w_{12} & w_{13} \\ w_{21} & w_{22} & w_{23} \\ w_{31} & w_{32} & w_{33} \end{array}\right] W=⎣⎡w11w21w31w12w22w32w13w23w33⎦⎤
接下来主要介绍常用的,效果比较好的k-近邻图构造准则
k-近邻法
构造图的 相似矩阵(邻接矩阵)步骤:
1.计算点对之间的欧氏距离;
2.通过给定参数kkk,选取距离当前点最近的k kk个点为邻居(常用高斯核计算距离),令其余点到该点距离为0。
wij={e−∥xi−xj∥222σ2if xi∈knn(xj)0otherwise (可能存在 wij≠wji)w_{i j}=\left\{\begin{array}{ll} e^{-\frac{\left\|x_{i}-x_{j}\right\|_{2}^{2}}{2 \sigma^{2}}} & \text { if } x_{i} \in k n n\left(x_{j}\right) \\ 0 & \text { otherwise } \end{array} \quad\left(\text { 可能存在 } w_{i j} \neq w_{j i}\right)\right. wij={e−2σ2∥xi−xj∥220 if xi∈knn(xj) otherwise ( 可能存在 wij=wji)
这样构造的问题: 数据从有向图变成了无向图,即你是我的kkk近邻,但我不一定属于你的kkk近邻。为了保证相似矩阵的对称性
,论文[1] (A tutorial on spectral clustering) 给出两种解决方法;
方法1》 若两点间有两条有向边,则忽略一条仅保留一条,具体做法如下:
wij=wji={e−∥xi−xj∥222σ2if xi∈knn(xj)or xj∈knn(xi)0otherwise w_{i j}=w_{j i}= \begin{cases}e^{-\frac{\left\|x_{i}-x_{j}\right\|_{2}^{2}}{2 \sigma^{2}}} & \text { if } x_{i} \in \operatorname{knn}\left(x_{j}\right) \text { or } x_{j} \in \operatorname{knn}\left(x_{i}\right) \\ 0 & \text { otherwise }\end{cases} wij=wji=⎩⎨⎧e−2σ2∥xi−xj∥220 if xi∈knn(xj) or xj∈knn(xi) otherwise
方法2》当且仅当你是我的kkk近邻,我也属于你的kkk近邻时,这两点之间的边才有权值,具体做法如下:
wij=wji={e−∥xi−xj∥222σ2if xi∈knn(xj)and xj∈knn(xi)0otherwise w_{i j}=w_{j i}= \begin{cases}e^{-\frac{\left\|x_{i}-x_{j}\right\|_{2}^{2}}{2 \sigma^{2}}} & \text { if } x_{i} \in k n n\left(x_{j}\right) \text { and } x_{j} \in k n n\left(x_{i}\right) \\ 0 & \text { otherwise }\end{cases} wij=wji=⎩⎨⎧e−2σ2∥xi−xj∥220 if xi∈knn(xj) and xj∈knn(xi) otherwise
而实战中常采用的方法则是:
W=W+WT2W=\frac{W+W^{T}}{2} W=2W+WT
简单粗暴!
三、确定目标函数
构造好了图结构,将数据点聚成ccc个类的问题,可以转换将无向图 切割为ccc个子图的问题。
由上图可知,很容易想到一个准则,即我们将距离较远(相似度较低)的两个点切分到不同子图时,需要付出代价最小。因此我们可以定义一个代价函数来作为我们初步的目标函数。
3.1 初始目标函数(最小割MinCut\text{MinCut}MinCut方法)
对于无向赋权图 Graph(X,E)\operatorname{Graph}(X, E)Graph(X,E) 进行切分的目标是将 GGG 划分成相互无连接的 kkk 个子 图, 每个子图包含点的集合 A1,A2,⋯,AkA_{1}, A_{2}, \cdots, A_{k}A1,A2,⋯,Ak, 且满足 Ai∩Aj=ϕ,A1∪A2∪⋯∪Ak=VA_{i} \cap A_{j}=\phi, A_{1} \cup A_{2} \cup \cdots \cup A_{k}=VAi∩Aj=ϕ,A1∪A2∪⋯∪Ak=V 。
对于任意两个子图点的集合 A,B⊂V,A∩B=ϕA, B \subset V, A \cap B=\phiA,B⊂V,A∩B=ϕ, 定义 AAA 和 BBB 之间的切图权重为:
W(A,B)=∑i∈A,j∈B,wijW(A, B)=\sum_{i \in A, j \in B,} w_{i j} W(A,B)=i∈A,j∈B,∑wij
对于 kkk 个子图点的集合 A1,A2,⋯,AkA_{1}, A_{2}, \cdots, A_{k}A1,A2,⋯,Ak, 定义切图 cutc u tcut 为:
cut(A1,A2,⋯,Ak)=12∑i=1kW(Ai,Aˉi)\operatorname{cut}\left(A_{1}, A_{2}, \cdots, A_{k}\right)=\frac{1}{2} \sum_{i=1}^{k} W\left(A_{i}, \bar{A}_{i}\right) cut(A1,A2,⋯,Ak)=21i=1∑kW(Ai,Aˉi)
其中 Aˉi\bar{A}_{i}Aˉi 为 AiA_{i}Ai, 的补集, 即除了子集 AjA_{j}Aj, 以外的其他 XXX 的子集的并集。
因此,我们可以进一步得到初步离散优化问题,即最小割目标函数:
minCut(V)⇒min∑vi∈Ak,vj∈Aˉk,eij∈Ewij\min C u t(V) \Rightarrow \min \sum_{v_{i} \in A_{k}, v_{j} \in \bar{A}_{k}, e_{i j} \in E} w_{i j} minCut(V)⇒minvi∈Ak,vj∈Aˉk,eij∈E∑wij
3.2 引入指示向量(indicator vector\text{indicator vector}indicator vector)
得到最小割目标函数后,我们发现其约束 vi∈Ak,vj∈Aˉk,eij∈Ev_{i} \in A_{k}, v_{j} \in \bar{A}_{k}, e_{i j} \in Evi∈Ak,vj∈Aˉk,eij∈E 比较模糊,较难求解,因此我们需要定性地引入指标向量来细化目标函数。
3.2.1 先讨论只有两个类的情况(c=2c=2c=2)
目标函数为:minCut(V)⇔minCut(A,Aˉ)⇔min12∑vi∈A,vj∈Aˉ,eij∈Ewij\min \operatorname{Cut}(V) \Leftrightarrow\min \operatorname{Cut}(A, \bar{A}) \Leftrightarrow\min \frac{1}{2} \sum_{v_{i} \in A, v_{j} \in \bar{A}, e_{i j} \in E}{w_{i j}}minCut(V)⇔minCut(A,Aˉ)⇔min21∑vi∈A,vj∈Aˉ,eij∈Ewij
我们定义指示向量 f=(f1,f2,…,fn)T∈Nnf=\left(f_{1}, f_{2}, \ldots, f_{n}\right)^{T} \in N^{n}f=(f1,f2,…,fn)T∈Nn
fi={1if vi∈A0if vi∈Aˉf_{i}= \begin{cases}1 & \text { if } v_{i} \in A \\ 0 & \text { if } v_{i} \in \bar{A}\end{cases} fi={10 if vi∈A if vi∈Aˉ
因此目标函数转变为:
min12∑vi∈A,vj∈Aˉ,eij∈Ewij⇔min12∑i=1n∑j=1nwij(fi−fj)2\min \frac{1}{2} \sum_{v_{i} \in A, v_{j} \in \bar{A}, e_{i j} \in E} w_{i j} \Leftrightarrow \min \frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} w_{i j}\left(f_{i}-f_{j}\right)^{2} min21vi∈A,vj∈Aˉ,eij∈E∑wij⇔min21i=1∑nj=1∑nwij(fi−fj)2
接下来我们展开 12wij(fi−fj)2\frac{1}{2} w_{i j}\left(f_{i}-f_{j}\right)^{2}21wij(fi−fj)2 二次项:12∑i=1n∑j=1nwij(fi−fj)2=12∑i=1n∑j=1n(wijfi2−2fifjwij+wijfj2)=12(∑i=1ndifi2−∑i,j=1n2fifjwij+∑j=1ndjfj2)=12(2∑i=1ndifi2−2∑i,j=1nfifjwij)=∑i=1ndifi2−∑i,j=1nfifjwij=∑i=1nfidifi−∑i,j=1nfiwijfj=fTDf−fTWf=fTLf\begin{aligned} \frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} w_{i j}\left(f_{i}-f_{j}\right)^{2} &=\frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n}\left(w_{i j} f_{i}^{2}-2 f_{i} f_{j} w_{i j}+w_{i j} f_{j}^{2}\right) \\ &=\frac{1}{2}\left(\sum_{i=1}^{n} d_{i} f_{i}^{2}-\sum_{i, j=1}^{n} 2 f_{i} f_{j} w_{i j}+\sum_{j=1}^{n} d_{j} f_{j}^{2}\right) \\ &=\frac{1}{2}\left(2 \sum_{i=1}^{n} d_{i} f_{i}^{2}-2 \sum_{i, j=1}^{n} f_{i} f_{j} w_{i j}\right) \\ &=\sum_{i=1}^{n} d_{i} f_{i}^{2}-\sum_{i, j=1}^{n} f_{i} f_{j} w_{i j}=\sum_{i=1}^{n} f_{i} d_{i} f_{i}-\sum_{i, j=1}^{n} f_{i} w_{i j} f_{j} \\ &=f^{T} D f-f^{T} W f \\ &=f^{T} L f \end{aligned} 21i=1∑nj=1∑nwij(fi−fj)2=21i=1∑nj=1∑n(wijfi2−2fifjwij+wijfj2)=21(i=1∑ndifi2−i,j=1∑n2fifjwij+j=1∑ndjfj2)=21(2i=1∑ndifi2−2i,j=1∑nfifjwij)=i=1∑ndifi2−i,j=1∑nfifjwij=i=1∑nfidifi−i,j=1∑nfiwijfj=fTDf−fTWf=fTLf
其中, DDD 为度矩阵, WWW 为邻接矩阵(相似矩阵),而 L=D−WL=D-WL=D−W 为LaplacianLaplacianLaplacian矩阵
因此,原目标函数等价于:argminA⊂VCut(V)⇔argminfi∈Nn12∑i=1n∑j=1nwij(fi−fj)2⇔argminfi∈NnfTLf\begin{gathered} \underset{A \subset V}{\arg \min } C u t(V) \Leftrightarrow \underset{f i \in N^{n}}{\arg \min } \frac{1}{2} \sum_{i=1}^{n} \sum_{j=1}^{n} w_{i j}\left(f_{i}-f_{j}\right)^{2} \Leftrightarrow \underset{f_{i} \in N^{n}}{\arg \min } f^{T} L f \\ \end{gathered} A⊂VargminCut(V)⇔fi∈Nnargmin21i=1∑nj=1∑nwij(fi−fj)2⇔fi∈NnargminfTLf
我们通过引入布尔指示向量将一个抽象的切割函数 Cut(V)C u t(V)Cut(V) 转化为具体可求解的 fTLff^{T} L ffTLf 。但是这是一个离散优化函数,无法对其求导。
3.2.2 有多个类的多聚类(ccc 取任意)
对于多聚类问题,我们要聚 ccc个类 (k=1,2,…,c)(k=1,2, \ldots, c)(k=1,2,…,c) ,因此我们仅仅需要将原来一个指示向量扩展为 ccc 个指示向量组合成的指示矩阵 HHH即可,其余步骤一样。
首先,我们定义指示向量 hk=(h(1,k),h(2,k),…,h(n,k))T∈Nn×1h_{k}=\left(h_{(1, k)}, h_{(2, k)}, \ldots, h_{(n, k)}\right)^{T} \in N^{n \times 1}hk=(h(1,k),h(2,k),…,h(n,k))T∈Nn×1 (其中: k=1,2,…,ck=1,2, \ldots, ck=1,2,…,c )并满足如下公式:hik={1if vi∈Ak0otherwise (i=1,…,n;k=1,…,c)h_{i k}=\left\{\begin{array}{ll} 1 & \text { if } v_{i} \in A_{k} \\ 0 & \text { otherwise } \end{array} \quad(i=1, \ldots, n ; k=1, \ldots, c)\right. hik={10 if vi∈Ak otherwise (i=1,…,n;k=1,…,c)
将这 ccc 个指示向量 hkh_{k}hk 组合成一个指示矩阵 H∈Nn×cH \in N^{n \times c}H∈Nn×c,矩阵 HHH 当中的每一列指示向量 正交 (orthonormalorthonormalorthonormal) 于其他任何一列非线性相关向量。(注:不代表HHH一定是正交矩阵)
Tr(HTH)=n>0\operatorname{Tr}\left(H^{T} H\right)=n>0Tr(HTH)=n>0
因此我们可以得到如下目标函数:
argminA1,…,AcCut(A1,…,Ac)⇔argminH∈Rn×cTr(HTLH)s.t Tr(HTH)=n\begin{aligned} \underset{A 1, \ldots, A_{c}}{\arg \min } C u t\left(A_{1}, \ldots, A_{c}\right) \Leftrightarrow \underset{H \in R^{n \times c}}{\arg \min } \operatorname{Tr}\left(H^{T} L H\right) & \\ \text { s.t } \operatorname{Tr}\left(H^{T} H\right)=n \\ & \end{aligned} A1,…,AcargminCut(A1,…,Ac)⇔H∈Rn×cargminTr(HTLH) s.t Tr(HTH)=n
但上面的目标函数存在一定局限,最小割得到的分割结果往往更倾向于将所连边最少且边权值较低的孤立点分割出来。如下图所示。
因此我们需要加入其它限制以改进目标函数分割效果。
3.3 改进(RatioCut与Ncut)
为了达到均衡的效果,我们很容易想到在原目标函数(切成每个子图的代价)的基础上除以切图后每个子图的规模。
==如何度量切图后子图的规模? ==
- 从顶点数的角度思考可以想到用子图的顶点数作为该子图的规模。
- 从边的角度思考可以想到用子图的边权和作为子图的规模。
两种度量方式用数学语言有如下定义:
子图A的势∣A∣:=thenumberofverticesinA子图A的体积vol(A):=∑vi∈Adi子图 A 的势 |A|:= the number of vertices in A \\ 子图 A 的体积 \operatorname{vol}(A):=\sum_{v_{i} \in A} d_{i}子图A的势∣A∣:=thenumberofverticesinA子图A的体积vol(A):=vi∈A∑di
我们可以得到如下两个改进后的目标函数RatioCut(比例切割)与Ncut(归一化切割):
RatioCut(A1,A2,…,Ac):=∑k=1cCut(Ak,Aˉk)∣Ak∣=12∑k=1cW(Ak,Aˉk)∣Ak∣Ncut(A1,A2,…,Ac):=∑k=1cCut(Ak,Aˉk)vol(Ak)=12∑k=1cW(Ak,Aˉk)vol(Ak)\begin{aligned} &\operatorname{RatioCut}\left(A_{1}, A_{2}, \ldots, A_{c}\right):=\sum_{k=1}^{c} \frac{C u t\left(A_{k}, \bar{A}_{k}\right)}{\left|A_{k}\right|}=\frac{1}{2} \sum_{k=1}^{c} \frac{W\left(A_{k}, \bar{A}_{k}\right)}{\left|A_{k}\right|} \\ &\operatorname{Ncut}\left(A_{1}, A_{2}, \ldots, A_{c}\right):=\sum_{k=1}^{c} \frac{C u t\left(A_{k}, \bar{A}_{k}\right)}{\operatorname{vol}\left(A_{k}\right)}=\frac{1}{2} \sum_{k=1}^{c} \frac{W\left(A_{k}, \bar{A}_{k}\right)}{\operatorname{vol}\left(A_{k}\right)} \end{aligned} RatioCut(A1,A2,…,Ac):=k=1∑c∣Ak∣Cut(Ak,Aˉk)=21k=1∑c∣Ak∣W(Ak,Aˉk)Ncut(A1,A2,…,Ac):=k=1∑cvol(Ak)Cut(Ak,Aˉk)=21k=1∑cvol(Ak)W(Ak,Aˉk)
四、目标函数求解
下面,我们先从非标准化RatioCutRatioCutRatioCut目标函数讲起。
4.1 RatioCutRatioCutRatioCut目标函数的近似解
4.1.1 二聚类(c=2c=2c=2)
minA⊂VRatioCut(A,Aˉ)\underset{A \subset V}{ min} \text{ } RatioCut(A,\bar{A})A⊂Vmin RatioCut(A,Aˉ)
上节我们推导出
minCut(V)⇔minfTLf\min \;Cut(V) \Leftrightarrow\min \; f^TLfminCut(V)⇔minfTLf
我们用拉格朗日乘子转化为无约束问题后可以得到一个有趣的结论。现在我们可以得到等价的完整目标函数:
minA⊂VRatioCut(A,Aˉ)⇔minf∈RnfTLfs.t f⊥1(thatisfT1=0)fTf=n(fTf>0)\begin{aligned} \min _{A \subset V} \operatorname{RatioCut}(A, \bar{A}) \Leftrightarrow & \min _{f \in R^{n}} f^{T} L f \\ & \text { s.t } f \perp 1 \quad(that \text{ }is \text{ }f^T1=0)\\ & f^{T} f=n \quad\left(f^{T} f>0\right) \end{aligned} A⊂VminRatioCut(A,Aˉ)⇔f∈RnminfTLf s.t f⊥1(that is fT1=0)fTf=n(fTf>0)
使用拉格朗日乘子将约束问题转化为无约束问题
有约束的目标函数我们不会做,我们可以转化为无约束问题,因此目标函数可以转化为如下LagrangianLagrangian \text{ }Lagrangian 函数L(f,λ)L(f,\lambda)L(f,λ):
L(f,λ):=fTLf−λ(fT1)−λ(fTf−n)=fTLf−λ(fTf−n)\begin{aligned} L(f, \lambda):=& f^{T} L f-\lambda\left(f^{T} 1\right)-\lambda\left(f^{T} f-n\right) \\ =& f^{T} L f-\lambda\left(f^{T} f-n\right) \\ \end{aligned} L(f,λ):==fTLf−λ(fT1)−λ(fTf−n)fTLf−λ(fTf−n)
等价将目标约束问题转换:
minf∈RnL(f,λ)⇔minf∈RnfTLfs.t f⊥1(that is fT1=0)fTf=n(fTf>0)\begin{aligned} \min _{f \in R^{n}} L(f, \lambda) \Leftrightarrow &\min _{f \in R^{n}} f^{T} L f \\ \text { s.t }& f \perp 1\left(\text { that is } f^{T} 1=0\right) \\ & f^{T} f=n \quad\left(f^{T} f>0\right) \end{aligned} f∈RnminL(f,λ)⇔ s.t f∈RnminfTLff⊥1( that is fT1=0)fTf=n(fTf>0)
现在我们得到无约束且连续的目标函数,由于二次型函数是天然的凸函数 亦可导,可以快速找到全局最优解,只需要令其导数为 0 即可得到极值。
(1) 求微分
dL(f,λ)=d[fTLf−λ(fTf−n)]=d(fTLf−λfTf)=d(fT)Lf+fTL(df)−λd(fT)f−λfT(df)=(df)TLf+fTL(df)−λ(df)Tf−λfT(df)=tr[(df)TLf+fTL(df)−λ(df)Tf−λfT(df)]=tr[(df)TLf]+tr[fTL(df)]−λ⋅tr[(df)Tf]−λ⋅tr[fT(df)]=tr[fTLT(df)]+tr[fTL(df)]−λ⋅tr[fT(df)]−λ⋅tr[fT(df)]=tr[fT(LT+L)(df)−2λfT(df)]=[fT(LT+L)−2λfT]df=[2fTLT−2λfT]df\begin{aligned} d L(f, \lambda) &=d\left[f^{T} L f-\lambda\left(f^{T} f-n\right)\right]=d\left(f^{T} L f-\lambda f^{T} f\right) \\ &=d\left(f^{T}\right) L f+f^{T} L(d f)-\lambda d\left(f^{T}\right) f-\lambda f^{T}(d f) \\ &=(d f)^{T} L f+f^{T} L(d f)-\lambda(d f)^{T} f-\lambda f^{T}(d f) \\ &=\operatorname{tr}\left[(d f)^{T} L f+f^{T} L(d f)-\lambda(d f)^{T} f-\lambda f^{T}(d f)\right] \\ &=\operatorname{tr}\left[(d f)^{T} L f\right]+\operatorname{tr}\left[f^{T} L(d f)\right]-\lambda \cdot \operatorname{tr}\left[(d f)^{T} f\right]-\lambda \cdot \operatorname{tr}\left[f^{T}(d f)\right] \\ &=\operatorname{tr}\left[f^{T} L^{T}(d f)\right]+\operatorname{tr}\left[f^{T} L(d f)\right]-\lambda \cdot \operatorname{tr}\left[f^{T}(d f)\right]-\lambda \cdot \operatorname{tr}\left[f^{T}(d f)\right] \\ &=\operatorname{tr}\left[f^{T}\left(L^{T}+L\right)(d f)-2 \lambda f^{T}(d f)\right] \\ &=\left[f^{T}\left(L^{T}+L\right)-2 \lambda f^{T}\right] d f \\ &=\left[2 f^{T} L^{T}-2 \lambda f^{T}\right] d f \end{aligned} dL(f,λ)=d[fTLf−λ(fTf−n)]=d(fTLf−λfTf)=d(fT)Lf+fTL(df)−λd(fT)f−λfT(df)=(df)TLf+fTL(df)−λ(df)Tf−λfT(df)=tr[(df)TLf+fTL(df)−λ(df)Tf−λfT(df)]=tr[(df)TLf]+tr[fTL(df)]−λ⋅tr[(df)Tf]−λ⋅tr[fT(df)]=tr[fTLT(df)]+tr[fTL(df)]−λ⋅tr[fT(df)]−λ⋅tr[fT(df)]=tr[fT(LT+L)(df)−2λfT(df)]=[fT(LT+L)−2λfT]df=[2fTLT−2λfT]df
(2) 求得导数
由标量微分dy=f′(x)dxdy = f'(x)dxdy=f′(x)dx推导出向量微分dy=(dydx)Tdxdy = (\frac{dy}{dx})^Tdxdy=(dxdy)Tdx得:
dL(f,λ)df=[2fTLT−2λfT]T=2Lf−2λf=0⇒Lf=λf\begin{aligned} \frac{d L(f, \lambda)}{d f} &=\left[2 f^{T} L^{T}-2 \lambda f^{T}\right]^{T}=2 L f-2 \lambda f=0 \\ & \Rightarrow L f=\lambda f \end{aligned} dfdL(f,λ)=[2fTLT−2λfT]T=2Lf−2λf=0⇒Lf=λf
我们得到了一个惊人的结论!!当LagrangeLagrangeLagrange乘子λ\lambdaλ是拉普拉斯矩阵LLL的特征值(eigenvalueeigenvalueeigenvalue)且指示向量fff是LLL的特征向量(eigenvectoreigenvectoreigenvector)时,函数有极值。
那么,这个函数的极值到底是什么呢?
在等式两边,分别左乘fTf^TfT凑成目标函数形式后为:
fTLf=λfTf=λnf^TLf=\lambda f ^Tf=\lambda nfTLf=λfTf=λn
因为n=∣V∣n=|V|n=∣V∣是常数,显然取决于目标函数值大小的元素是λ\lambdaλ,即
minfTLffTf=minλmin \frac{f^TLf}{f^Tf}=\min \lambda minfTffTLf=minλ
也就是说LLL的特征值λ\lambdaλ越大,目标函数值越大;特征值λ\lambdaλ越小,目标函数值越小。
渐渐的,我们发现原来的连续优化问题已经转化成了特征分解问题。
那么λ\lambdaλ的最小值是多少呢?λmin=0λ_{min} =0λmin=0
令拉普拉斯矩阵的第二小特征值作为目标函数最优值。
对于二聚类(c=2c=2c=2)问题,这个很好做,毕竟我们的解向量f∈Rnf\in R^nf∈Rn
,因此最简单粗暴的定性方法是判断fif_ifi是否大于等于0,即
{vi∈Aif fi≥0vi∈Aˉif fi<0\begin{cases}v_{i} \in A & \text { if } f_{i} \geq 0 \\ v_{i} \in \bar{A} & \text { if } f_{i}<0\end{cases} {vi∈Avi∈Aˉ if fi≥0 if fi<0
4.1.2 多聚类(ccc取任意值)
RatioCut (A1,…,Ac)=∑k=1chiTLhi=∑k=1c(HTLH)ii=Tr(HTLH)\text { RatioCut }\left(A_{1}, \ldots, A_{c}\right)=\sum_{k=1}^{c} h_{i}^{T} L h_{i}=\sum_{k=1}^{c}\left(H^{T} L H\right)_{i i}=\operatorname{Tr}\left(H^{T} L H\right) RatioCut (A1,…,Ac)=k=1∑chiTLhi=k=1∑c(HTLH)ii=Tr(HTLH)
由于指示矩阵HHH中向量之间的正交性,我们可以得到如下完整目标函数:
argminH∈Rn×cTr(HTLH)s.t HTH=I[Tr(HTH)>0]\begin{aligned} &\underset{H \in R^{n \times c}}{\arg \min } \operatorname{Tr}\left(H^{T} L H\right) \\ &\text { s.t } H^{T} H=I \quad\left[\operatorname{Tr}\left(H^{T} H\right)>0\right] \end{aligned} H∈Rn×cargminTr(HTLH) s.t HTH=I[Tr(HTH)>0]
类似的,可以推出:
minTr(HTLH)⇔minλmin\text{ }Tr(H^T LH)⇔minλmin Tr(HTLH)⇔minλ
由于特征值λ\lambdaλ(也是拉格朗日乘子)在这里的物理意义代表切图的代价,因此我们可以将前kkk小特征值对应的kkk个特征向量拼接成一个矩阵U∈Rn×kU\in R^{n\times k}U∈Rn×k作为H∈Rn×cH\in R^{n\times c}H∈Rn×c的近似解。然后使用传统的k−meansk-meansk−means方法,将连续实数值离散化,将矩阵UUU的nnn行向量聚为ccc行向量,最终得到的labellabellabel即为最终聚类结果。
4.2 NcutNcutNcut目标函数的近似解
大家可以按RatidoCutRatidoCutRatidoCut解法自己推导,下面给出NcutNcutNcut目标函数:
Ncut(A1,A2,…,Ac):=∑k=1cCut(Ak,Aˉk)vol(Ak)=12∑k=1cW(Ak,Aˉk)vol(Ak)\operatorname{Ncut}\left(A_{1}, A_{2}, \ldots, A_{c}\right):=\sum_{k=1}^{c} \frac{\operatorname{Cut}\left(A_{k}, \bar{A}_{k}\right)}{\operatorname{vol}\left(A_{k}\right)}=\frac{1}{2} \sum_{k=1}^{c} \frac{W\left(A_{k}, \bar{A}_{k}\right)}{\operatorname{vol}\left(A_{k}\right)} Ncut(A1,A2,…,Ac):=k=1∑cvol(Ak)Cut(Ak,Aˉk)=21k=1∑cvol(Ak)W(Ak,Aˉk)
具体代码实现可以看看这篇博客:
谱聚类的成功之处在于它没有很强的假设,相比k−meansk-meansk−means假设聚类的数据分布是凸凸凸的,谱聚类可以解决很普遍的聚类问题。
只要保证相似图是稀疏的,即使对于大数据集,谱聚类也可以有效地实现。一旦选择了相似图,我们只需解决一个线性问题,就不会陷入局部极小值或多次使用不同的初始化重新启动算法。
谱聚类的不足在于图构造方式的不同导致其聚类结果不同,这是其聚类不稳定的重要因素。
谱图理论(spectrum theory)实操
参考文献
[1] Von Luxburg U. A tutorial on spectral clustering[J]. Statistics and computing, 2007, 17(4): 395-416.
[2]https://blog.csdn.net/SL_World/article/details/104423536
[3]从拉普拉斯矩阵说到谱聚类
【机器学习】谱聚类(Spectral Clustering)相关推荐
- 谱聚类(Spectral Clustering)详解
原文地址为: 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering)详解 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方 ...
- 22 谱聚类 Spectral Clustering
1 Background 本章节主要是描述的一种聚类算法,谱聚类(Spectral Clustering).对机器学习有点了解的同学对聚类算法肯定是很熟悉的,那么谱聚类和之前普通的聚类算法有什么不一样 ...
- 谱聚类 Spectral Clustering
谱聚类 Spectral Clustering sklearn.cluster.SpectralClustering 谱聚类(Spectral Clustering, SC), 是一种基于图论的聚类方 ...
- python谱聚类算法_谱聚类Spectral clustering(SC)
在之前的文章里,介绍了比较传统的K-Means聚类.Affinity Propagation(AP)聚类.比K-Means更快的Mini Batch K-Means聚类以及混合高斯模型Gaussian ...
- 谱聚类(spectral clustering)
谱聚类概述 谱聚类是从图论中演化出来的算法,后来在聚类中得到了广泛的应用.它的主要思想是把所有的数据看做空间中的点,这些点之间可以用边连接起来.距离较远的两个点之间的边权重值较低,而距离较近的两个点之 ...
- 小白学习机器学习===谱聚类之NCut切图
Ncut Ncut切法实际上与Ratiocut相似,但Ncut把Ratiocut的分母|Ai|换成vol(Ai)(Vol(Ai)表示子集A中所有边的权重之和),这种改变与之而来的,是L的 ...
- 谱聚类算法(Spectral Clustering)优化与扩展
谱聚类算法(Spectral Clustering)优化与扩展 谱聚类(Spectral Clustering, SC)在前面的博文中已经详述,是一种基于图论的聚类方法,简单形象且理论基础充分,在社交 ...
- python谱聚类算法_谱聚类(spectral clustering)原理总结
谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱聚类对数据分布的适应性更强,聚类效果也很优秀,同时聚类的计算量也小很多,更加难能可贵的是实现起来也 ...
- 高斯核函数初始化邻接矩阵_转:谱聚类(spectral clustering)原理总结
转自:https://www.cnblogs.com/pinard/p/6221564.html 谱聚类(spectral clustering)是广泛使用的聚类算法,比起传统的K-Means算法,谱 ...
- 谱聚类算法(Spectral Clustering)
谱聚类算法(Spectral Clustering) 谱聚类(Spectral Clustering, SC)是一种基于图论的聚类方法--将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似 ...
最新文章
- 循环神经网络 递归神经网络_如何用递归神经网络预测空气污染
- 每天OnLineJudge 之 “杨辉三角 ”
- jdk jenkins 配置ant_安装配置maven、ant(Jenkins)
- 【Java/JFrame/多线程】小球碰到边缘的回弹效果
- 运维质变育新机,华为云能否引领政企运维破局?
- 影响索引的mysql函数_mysql索引对排序的影响实例分析
- java抽象类及其派生类_java抽象类
- Oracle varchar和varchar2的区别
- 一般python程序员的工资_【Python程序员工资|Python程序员待遇怎么样】-看准网
- 如何新建一个css到html,新建一个css样式
- 海天讲座(一)最优传输理论
- 如何用未越狱手机安装ipa文件(更新版)
- 打字速度单位wpm,kpm 是怎样计算的
- spark运行在windows环境的idea遇到的问题记录
- HyperTerminal 超级终端设置TCP/IP Client和TCP/IP Server
- 本地服务器收银系统,开酒吧用什么收银系统?
- AI大模型能带来强人工智能吗 这是值得思考的问题
- 物联网平台可以做什么
- mycat 跨库间连表查询解决方案
- MongoDB 自学笔记(入门级教程)