谱聚类算法分两步进行,第一步可以看做是把原始数据投影到一个新的(低维)空间,第二步在新的空间中对数据进行处理得到最终聚类结果。第二步常采用的方法有Kmeans,这里介绍另外一种方式:谱旋转(spectral rotation)。关于谱聚类的详细介绍可参见这篇博客。
谱聚类第一步中求解的目标式可表述为:
给定Y是n*c大小的标签矩阵(0,1取值),理想的F是离散的,每一行只有一个非零元,且可以这样表示: F=Y(YTY)−1/2=f(Y) 。于是F满足的约束是: F>=0 , FTF=Ik 。为了求解的方便,F被松弛为连续取值(即忽略掉了非负约束),上面的目标式也是这样来的。那我们可以再定义了一个映射 f−1 ,由指示矩阵到标签矩阵: Y∗=f−1(F∗)=diag(F∗F∗T)−1/2F∗ ,这里diag(M)表示一个对角矩阵,对角元跟M的对角元一样。同样可以验证, f−1(F∗R)=Y∗R 。
现在的目标就是要根据松弛后的指示矩阵F*,尽可能准确的获取簇标签矩阵Y,即让F*对应的Y*R尽可能接近Y,注意这里除了Y未知,还需要挑选一个合适的R,即有两个优化变量,公式化表述就是:
可采用交替优化的方式来求解上式:
1. 固定R,求Y : 非极大抑制(non-maximum suppression)
2. 固定Y,求R : SVD分解
ref:
[1] Yu, Stella X., and J. Shi. “Multiclass Spectral Clustering.” ICCV 2003.
[2] Nie, Feiping, et al. “Spectral embedded clustering.” IJCAI 2009.