白话什么是谱聚类算法

谱聚类(Spectral Clustering, SC), 是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而子图间距离尽量距离较远

换句话说,

  1. 就是首先要将数据转换为图,即所有的数据看做空间中的点,点点之间用边相连。距离较远的两个点,它们之间边的权重值较低,距离较近的两点之间边的权重值较高。
  2. 然后要对这个图进行切图。
  3. 目标,是要让切图后不同的子图间边权重和尽可能的低,而子图内的边权重和尽可能的高。即子图间距离尽量较远,子图内部尽量相似。
    这样就完成了将原数据聚类为不同子集的过程。

当遇到比较复杂的聚类问题时,k-means 很难有较好的效果时,可以用谱聚类。


谱聚类算法流程为:

Input: (x_1, ..., x_n)
Output: (c_1, ..., c_{k_2})

  1. 根据输入的相似矩阵的生成方式构建样本的相似矩阵S
  2. 根据相似矩阵S构建邻接矩阵W,构建度矩阵D
  3. 计算出拉普拉斯矩阵L
  4. 构建标准化后的拉普拉斯矩阵 D^{−1/2} L D^{−1/2}
  5. 计算 D^{−1/2} L D^{−1/2} 最小的 k_1 个特征值所各自对应的特征向量f
  6. 将各自对应的特征向量f组成的矩阵按行标准化,最终组成n×k1维的特征矩阵F
  7. 对F中的每一行作为一个k1维的样本,共n个样本,用输入的聚类方法进行聚类,聚类维数为k2。
  8. 得到簇划分 (c_1, ..., c_{k_2})

一句话总结这个流程就是,利用样本数据,得到相似矩阵(拉普拉斯矩阵),再进行特征分解后得到特征向量,对特征向量构成的样本进行聚类。


其中涉及的主要概念:

  1. 无向图:边上的权重和两点的方向无关: w_{ij} = w_{ji}

  2. :和该顶点相连的所有边的权重之和 d_i = \sum_{j=1}^n w_{ij}

  3. 度矩阵D:是一个对角矩阵,只有主对角线有值,为每个顶点的度值

\begin{pmatrix} d_1 & \cdots & \cdots \\ \cdots & d_2 & \cdots \\ \vdots & \vdots & \ddots \\ \cdots & \cdots & d_n \\ \end{pmatrix}

  1. 邻接矩阵W:它的第i行的第j个值对应权重w_{ij}

如何得到这个邻接矩阵?

可以通过样本点距离度量的相似矩阵S来获得邻接矩阵W

构建邻接矩阵W的方法有三个:ϵ-邻近法,K邻近法和全连接法。

最常用的是全连接法,它选择不同的核函数来定义边权重,最常用的是高斯核函数RBF

W_{ij}=S_{ij}=exp(-\frac{||x_i-x_j||_2^2}{2\sigma^2})

  1. 拉普拉斯矩阵: L=D−W。D 为度矩阵,W 为邻接矩阵
  1. 无向图G的切图:就是将图G(V,E)切成相互没有连接的k个子图

那么如何切图可以让子图内的点权重和高,子图间的点权重和低呢:

先定义两个子图A和B之间的切图权重为:W(A,B) = \sum_{i∈A,j∈B} w_{ij}

再定义有 k 个子图的切图cut为:即所有子图 A_i 与其补集 \overline{A}_i 之间的切图权重之和: cut(A_1,A_2,...A_k) = \frac{1}{2}\sum\limits_{i=1}^{k}W(A_i, \overline{A}_i )

这样当我们最小化这个cut时,就相当于让子图间的点权重和低

但以最小化 cut 为目标,存在一个问题,就是有时候最小cut的切图方式,却不是最优的

为避免最小切图导致的切图效果不佳,需要对每个子图的规模做出限定,一般有两种切图方式,RatioCut,Ncut,常用的是 Ncut切图

  1. Ncut切图:

RatioCut 切图函数为:
NCut(A_1,A_2,...A_k) = \frac{1}{2}\sum\limits_{i=1}^{k}\frac{W(A_i, \overline{A}_i )}{vol(A_i)}

它的优化目标为:

\underbrace{arg\;min}_H\; tr(H^TLH) \;\; s.t.\;H^TDH=I

进一步令 H = D^{-1/2}F,则有 H^TLH = F^TD^{-1/2}LD^{-1/2}F,于是优化目标变为:

\underbrace{arg\;min}_F\; tr(F^TD^{-1/2}LD^{-1/2}F) \;\; s.t.\;F^TF=I

然后就可以求出 D^{-1/2}LD^{-1/2} 的最小的前k个特征值,求出特征向量,并标准化,得到特征矩阵F, 再对F进行一次传统的聚类方法,最终就完成了聚类任务。


一个用 sklearn 做谱聚类的小例子:

    sklearn.cluster import SpectralClustering
    import numpy as np
    import math

    X = np.array([[185.4, 72.6],
    [155.0, 54.4],
    [170.2, 99.9],
    [172.2, 97.3],
    [157.5, 59.0],
    [190.5, 81.6],
    [188.0, 77.1],
    [167.6, 97.3],
    [172.7, 93.3],
    [154.9, 59.0]])

    w, h = 10, 10;

     #构建相似度矩阵,任意两个样本间的相似度= 100 - 两个样本的欧氏距离
    Matrix = [[100- math.hypot(X[x][0]- X[y][0], X[x][1]- X[y][1]) for x in range(w)] for y in range(h)]

    sc = SpectralClustering(3, affinity='precomputed', n_init=10)
    sc.fit(Matrix)

    print('spectral clustering')   
    print(sc.labels_)

学习资料:
https://www.cnblogs.com/pinard/p/6221564.html
https://www.cnblogs.com/sparkwen/p/3155850.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容