谱聚类(Spectral Clustering)

谱聚类(Spectral Clustering)

本文技术来自“ A Tutorial on Spectral Clustering ”:

  • 最近用到了谱聚类算法,在对谱聚类有了初步的了解之后打算写下这片文章作为笔记。

定义

  • 无向图 G=<V,E> :V是由数据集构成的图的顶点;E为每条边的权值,也就是顶点之间的相似度,换句话说E是每两个数据集之间的相似度。
  • 相似度矩阵。计算相似度,计算顶点之间的相似度。想用什么距离判断方法就用什么,只要符合数据的性质即可,如Nearest neighbors、高斯核函数等等。
  • 邻接矩阵 W (Adjacency Matrix):子图A和子图 B 之间所有边的权值之和(ωijij,,0):
    W(A,B)=iA,jBω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=DW

  • 禁止盗图
    Laplacian:
    fLf=12i,j=1Nωij(fifj)2

    其中 f 为任意向量,L=DWW(A,B)=iA,jBωijdi=nj=1ωij
    证明过程:
    fLf=fDffWf=12(i=1ndif2i2i,j=1nfifjωijj=1ndif2j)=12i,j=1Nωij(fifj)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)=12i=1kW(Ai,Ai)

Ai 表示第 i 个子图,Ai Ai 的补集, W(Ai,Ai) 表示子图 Ai 与其他所有子图(即 Ai )之间的所有边的权重之和(换言之,如果要分成 k 个组,那么其代价就是进行分割时去掉的边的权值的总和)。我们要最小化目标函数:
mincut(Ai,...,Ak)=min(12i=1kW(Ai,Ai))

此时有个问题:假设 k=2 ,目标函数 cut() 有可能会将图分成一个点和 n1 个点的集合(即{ 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)=12i=1kW(Ai,Ai)|Ai|=12i=1kcut(Ai,Ai)|Ai|

|Ai|AiV
RatioCut 的原理很简单:如果某一子图中包含的顶点个数越少,那么该图的值就越大。也就解决了上述问题。

2 最小化目标函数

定义向量 fi=|Ai||Ai|,|Ai||Ai|,if viA if viA
Laplacian 矩阵性质 fLf=12Ni,j=1ωi,j(fifj)2:

fLf2|V|RatioCut(A,A)


 fLf=12i,j=1Nωi,j(fifj)2=12iA,jAωij|A||A|+|A||A|2+iA,jAω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)minfLfminLminλ

即求得 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 RatioCutGk
  • 3 WDegreeMatrixDLaplacianL
  • 4 LK
  • 5 kshape=Nk
  • 6 kmeans

也就是利用拉普拉斯矩阵的特征值分析再利用 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值