22 谱聚类——Spectral Clustering

news/2024/5/20 8:02:59 标签: 聚类, 机器学习, 算法

文章目录

  • 22 谱聚类——Spectral Clustering
    • 22.1 背景介绍
    • 22.2 模型介绍
    • 22.3 模型导出
    • 22.4 模型的矩阵形式

22 谱聚类——Spectral Clustering

22.1 背景介绍

我们在一般的聚类过程中,普遍理性而言会有两种思想:

  1. 将聚集在一起的点进行聚类(离得近的为同一类数据),例如可以线性分类的一组数据。
  2. 将具有联通性的一堆点进行聚类,如环形等线性不可分的数据。(这种其实在一定情况下也可以通过Kernel+K-Mean实现——进行非线性转换)

所以我们可以将聚类方法分成两大类:

  1. compactness: K-means, GMM
  2. connectivity: Spectral Clustering

22.2 模型介绍

Spectral Clustering实际上可以表示为一个带权重的无向图。

先给这张图做一个定义:

  1. 基本数据表示为:
    G = { V , E } , V = { 1 , 2 , … , N } , W = [ w i j ] , 1 ≤ i , j ≤ N G = {\lbrace V, E \rbrace}, \quad V = {\lbrace 1, 2, \dots, N \rbrace}, \quad W = [w_{ij}], 1 \leq i, j \leq N G={V,E},V={1,2,,N},W=[wij],1i,jN

  2. 其中 W W W也被称为Simlarity Matrix或Affinity Matrix, w i j w_{ij} wij​表示为:
    w i j = { K ( x i , x j ) = exp ⁡ { − ∥ x i − x j ∥ 2 2 2 σ 2 } ( i , j ) ∈ E 0 o t h e r w i s e w_{ij} = \begin{cases} K(x_i, x_j) = \exp{\lbrace - \frac{{\lVert x_i - x_j \rVert}_2^2}{2 \sigma^2} \rbrace} & (i, j) \in E \\ 0 & otherwise \end{cases} wij={K(xi,xj)=exp{2σ2xixj22}0(i,j)Eotherwise
    代表了节点之间的相似度

  3. 再做一个定义,用于表示一个符号:若 A ⊂ V , B ⊂ V , A ∩ B = ∅ A \subset V, B \subset V, A \cap B = \empty AV,BV,AB=,则表示集合之间的相似度为
    W ( A , B ) = ∑ i ∈ A , j ∈ B w i j W(A, B) = \sum_{i \in A, j \in B} w_{ij} W(A,B)=iA,jBwij

22.3 模型导出

接下来具体导出该模型的公式:

  1. 我们可以认为每个节点用于表示一个数据,而边表示数据之间的关联,而现在的目标是将数据分成 K K K类,且每一组数据之间的相似度最低,所以我们自然要删除一些边,将图变成由 K K K个连通图组成。

  2. 为了数学化表示,我们定义一个函数 C u t ( V ) Cut(V) Cut(V)用于表示集合 V V V​删除边的权值之和:
    C u t ( V ) = C u t ( A 1 , A 2 , … , A K ) = ∑ k = 1 K W ( A k , A k ˉ ) Cut(V) = Cut(A_1, A_2, \dots, A_K) = \sum_{k=1}^K W(A_k, {\bar {A_k}}) Cut(V)=Cut(A1,A2,,AK)=k=1KW(Ak,Akˉ)

  3. 但如果通过 C u t ( V ) Cut(V) Cut(V)用于表示目标函数,未免有失偏颇。因为我们切开的每一类中的节点数都是不同的,对于他们的相似度,我们应该做一个加权平均。

  4. 一般来说我们会通过节点数求均值: ∑ k = 1 K W ( A k , A k ˉ ) ∣ A k ∣ \sum_{k=1}^K \frac{W(A_k, {\bar {A_k}})}{|A_k|} k=1KAkW(Ak,Akˉ)。但本模型是通过边表示相似度,所以我们应当用类中度数加权,将新的函数定义为 N c u t ( V ) Ncut(V) Ncut(V)
    { N c u t ( V ) = ∑ k = 1 K W ( A k , A k ˉ ) ∑ i ∈ A k d e g r e e ( i ) d e g r e e ( i ) = ∑ j = 1 N w i j \begin{cases} Ncut(V) = \sum_{k=1}^K \frac{W(A_k, {\bar {A_k}})}{\sum_{i \in A_k} degree(i)} \\ degree(i) = \sum_{j=1}^N w_{ij} \end{cases} {Ncut(V)=k=1KiAkdegree(i)W(Ak,Akˉ)degree(i)=j=1Nwij

  5. 所以我们最后的目标就是这样一个带优化问题:
    { A k ˉ } k = 1 K = a r g min ⁡ { A k ˉ } k = 1 K N c u t ( V ) {\lbrace {\bar{A_k}} \rbrace}_{k=1}^K = arg\min_{{\lbrace {\bar{A_k}} \rbrace}_{k=1}^K} Ncut(V) {Akˉ}k=1K=arg{Akˉ}k=1KminNcut(V)

由于这样的数学表示有些过于繁杂,我们自然会想通过矩阵将其表示,首先引入一个指示向量替代目标问题:

  1. 假定有指示向量(indicator vector),定义为:
    { Y = ( y 1   y 2   …   y N ) N × K T y i ∈ { 0 , 1 } K ∑ j = 1 K y i j = 1 \begin{cases} Y = {(y_1 \ y_2 \ \dots \ y_N)}_{N \times K}^T \\ y_i \in {\lbrace 0, 1 \rbrace}^K \\ \sum_{j=1}^K y_{ij} = 1 \end{cases} Y=(y1 y2  yN)N×KTyi{0,1}Kj=1Kyij=1
    所以大致可以表现为 y i = ( 0   …   1   …   0 ) T y_i = {(0 \ \dots \ 1 \ \dots \ 0)}^T yi=(0  1  0)T,用于表示第 i i i个样本属于第 j j j个类别

  2. 那么我们就可以将带优化问题表示为:
    Y ˉ = a r g min ⁡ Y N c u t ( V ) {\bar Y} = arg\min_{Y} Ncut(V) Yˉ=argYminNcut(V)

22.4 模型的矩阵形式

继目标问题之后,我们也要将优化问题化为矩阵形式:首先化简 N c u t ( V ) Ncut(V) Ncut(V)函数,下文中将 d e g r e e ( i ) degree(i) degree(i)简化为 d i d_i di

N c u t ( V ) = ∑ k = 1 K W ( A k , A k ˉ ) ∑ i ∈ A k d i = ( W ( A 1 , A 1 ˉ ) ∑ i ∈ A 1 d i … W ( A K , A K ˉ ) ∑ i ∈ A K d i ) = t r [ ( W ( A 1 , A 1 ˉ ) … W ( A K , A K ˉ ) ) ⏟ O K × K ( ∑ i ∈ A 1 d i … ∑ i ∈ A K d i ) − 1 ⏟ P K × K ] = t r ( O ⋅ P − 1 ) \begin{align} Ncut(V) &= \sum_{k=1}^K \frac{W(A_k, {\bar {A_k}})}{\sum_{i \in A_k} d_i} = \begin{pmatrix} \frac{W(A_1, {\bar {A_1}})}{\sum_{i \in A_1} d_i} & & \\ & \dots & \\ & & \frac{W(A_K, {\bar {A_K}})}{\sum_{i \in A_K} d_i} \end{pmatrix} \\ &= tr \left[ \underbrace{\begin{pmatrix} {W(A_1, {\bar {A_1}})} & & \\ & \dots & \\ & & {W(A_K, {\bar {A_K}})} \end{pmatrix}}_{O_{K \times K}} \underbrace{{\begin{pmatrix} {\sum_{i \in A_1} d_i} & & \\ & \dots & \\ & & {\sum_{i \in A_K} d_i} \end{pmatrix}}^{-1}}_{P_{K \times K}} \right] \\ &= tr(O \cdot P^{-1}) \end{align} Ncut(V)=k=1KiAkdiW(Ak,Akˉ)= iA1diW(A1,A1ˉ)iAKdiW(AK,AKˉ) =tr OK×K W(A1,A1ˉ)W(AK,AKˉ) PK×K iA1diiAKdi 1 =tr(OP1)

我们将 N c u t ( V ) Ncut(V) Ncut(V)函数拆分成了两部分,我们现在已知 W , Y W, Y W,Y,我们需要通过已知条件构造出 O , P O, P O,P。为了构造出 P P P

  1. 我们先来了解一下 Y Y Y​的性质:
    Y T Y = ( y 1   y 2   …   y N ) ( y 1 T y 2 T … y N T ) = ∑ i = 1 N y i y i T ⏟ = d i a g ( 0 , … , 1 , … , 0 ) = ( N 1 … N K ) ⏟ N = ∑ i = 1 K N i = ( ∑ i ∈ A 1 1 … ∑ i ∈ A K 1 ) \begin{align} Y^T Y &= (y_1 \ y_2 \ \dots \ y_N) \begin{pmatrix} y_1^T \\ y_2^T \\ \dots \\ y_N^T \end{pmatrix} = \sum_{i=1}^N \underbrace{y_i y_i^T}_{=diag(0, \dots, 1, \dots, 0)} \\ &= \underbrace{\begin{pmatrix} N_1 & & \\ & \dots & \\ & & N_K \end{pmatrix}}_{N = \sum_{i=1}^K N_i} = \begin{pmatrix} \sum_{i \in A_1} 1 & & \\ & \dots & \\ & & \sum_{i \in A_K} 1 \end{pmatrix} \end{align} YTY=(y1 y2  yN) y1Ty2TyNT =i=1N=diag(0,,1,,0) yiyiT=N=i=1KNi N1NK = iA11iAK1

  2. 我们发现,倘如能把矩阵中的 1 1 1换成 d i d_i di,结果就是 P P P了,所以:
    { P = ( ∑ i ∈ A 1 d i … ∑ i ∈ A K d i ) = Y T D Y D = ( d 1 … d N ) = d i a g ( W ⋅ 1 N ⏟ ( ∑ j = 1 N w 1 j   …   ∑ j = 1 N w N j ) T ) \begin{cases} P = \begin{pmatrix} {\sum_{i \in A_1} d_i} & & \\ & \dots & \\ & & {\sum_{i \in A_K} d_i} \end{pmatrix} = Y^T D Y \\ D = \begin{pmatrix} d_1 & & \\ & \dots & \\ & & d_N \end{pmatrix} = diag( \underbrace{W \cdot 1_N}_{{(\sum_{j=1}^N w_{1j} \ \dots \ \sum_{j=1}^N w_{Nj})}^T} ) \end{cases} P= iA1diiAKdi =YTDYD= d1dN =diag((j=1Nw1j  j=1NwNj)T W1N)

为了构造出 O O O

  1. 我们先对 O O O进行一些数学变换,根据 W ( A k , A k ˉ ) = W ( A k , V ) − W ( A k , A k ) W(A_k, {\bar {A_k}}) = W(A_k, V) - W(A_k, {A_k}) W(Ak,Akˉ)=W(Ak,V)W(Ak,Ak)可得:
    O = ( W ( A 1 , A 1 ˉ ) … W ( A K , A K ˉ ) ) = ( ∑ i ∈ A 1 d i … ∑ i ∈ A K d i ) − ( W ( A 1 , A 1 ) … W ( A K , A K ) ) \begin{align} O &= \begin{pmatrix} {W(A_1, {\bar {A_1}})} & & \\ & \dots & \\ & & {W(A_K, {\bar {A_K}})} \end{pmatrix} \\ &= \begin{pmatrix} {\sum_{i \in A_1} d_i} & & \\ & \dots & \\ & & {\sum_{i \in A_K} d_i} \end{pmatrix}- \begin{pmatrix} {W(A_1, {A_1})} & & \\ & \dots & \\ & & {W(A_K, {A_K})} \end{pmatrix} \end{align} O= W(A1,A1ˉ)W(AK,AKˉ) = iA1diiAKdi W(A1,A1)W(AK,AK)

  2. 为了表示 O O O,我们发现 l e f t = Y T D Y left=Y^TDY left=YTDY,这个已经求出来了。为了表示 r i g h t right right,我们模仿着看一下 Y T W Y Y^TWY YTWY是什么(我们知道 y i y j T y_i y_j^T yiyjT的矩阵只有在 ( i , j ) (i, j) (i,j)的位置上为 1 1 1,其他地方都是 0 0 0):
    Y T W Y = ∑ i = 1 N ∑ j = 1 N y i w i j y j T = ∑ i = 1 N ∑ j = 1 N y i y j T w i j = ( ∑ i ∈ A 1 ∑ j ∈ A 1 w i j … ∑ i ∈ A 1 ∑ j ∈ A K w i j … … ∑ i ∈ A K ∑ j ∈ A 1 w i j ∑ i ∈ A K ∑ j ∈ A K w i j ) \begin{align} Y^TWY &= \sum_{i=1}^N \sum_{j=1}^N y_i w_{ij} y_j^T = \sum_{i=1}^N \sum_{j=1}^N y_i y_j^T w_{ij} \\ &= \begin{pmatrix} \sum_{i \in A_1} \sum_{j \in A_1} w_{ij} & \dots & \sum_{i \in A_1} \sum_{j \in A_K} w_{ij} \\ \dots & \dots & \\ \sum_{i \in A_K} \sum_{j \in A_1} w_{ij} & & \sum_{i \in A_K} \sum_{j \in A_K} w_{ij} \end{pmatrix} \end{align} YTWY=i=1Nj=1NyiwijyjT=i=1Nj=1NyiyjTwij= iA1jA1wijiAKjA1wijiA1jAKwijiAKjAKwij

  3. 我们发现其实 Y T W Y ≠ r i g h t Y^TWY \neq right YTWY=right,但如果我们假设 O ′ = Y T D Y − Y T W Y O^{'} = Y^TDY - Y^TWY O=YTDYYTWY,我们会发现其实用 O ′ O^{'} O替代 O O O进行计算也没有问题,因为我们只需要求trace, O ′ O^{'} O的对角线与 O O O​相同即可。用数学语言表示为:
    t r ( O ⋅ P − 1 ) = t r ( O ′ ⋅ P − 1 ) tr(O \cdot P^{-1}) = tr(O^{'} \cdot P^{-1}) tr(OP1)=tr(OP1)

根据以上证明,我们可以将问题简化为:
Y ˉ = a r g min ⁡ Y t r ( Y T ( D − W ) Y ⋅ ( Y T D Y ) − 1 ) {\bar Y} = arg\min_{Y} tr\big( Y^T (D-W) Y \cdot {(Y^T D Y)}^{-1} \big) Yˉ=argYmintr(YT(DW)Y(YTDY)1)


http://www.niftyadmin.cn/n/443083.html

相关文章

VTK Observer和Command模式详解

本文记录一些在VTK开发中遇到的一些细节问题 VTK 不显示窗口问题 需要添加入如下code #include "vtkAutoInit.h" VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle);VTK Observer和Command 模式 vtkObject提供了AddObserver和InvokeE…

走进人工智能|深度学习 算法的创世纪

前言: 深度学习通过训练深层神经网络模型,可以自动学习和提取数据的特征,包括更准确的图像识别、自然语言处理、医学诊断等方面的应用。 文章目录 序言背景算法的创世纪技术支持应用领域程序员如何学总结 序言 深度学习是一种机器学习方法&a…

NLP实战:使用Word2vec实现文本分类

目录 一、数据预处理 1、加载数据 2. 构建词典 3.生成数据批次和迭代器 二、模型构建 1.搭建模型 2.初始化模型 3.定义训练与评估函数 三、训练模型 1. 拆分数据集并运行模型 2. 测试指定数据 🍨 本文为[🔗365天深度学习训练营]内部限免文章&…

架构-嵌入式模块

章节架构 约三分,主要为选择题 #mermaid-svg-z6RGCDSEQT5AhE1p {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-z6RGCDSEQT5AhE1p .error-icon{fill:#552222;}#mermaid-svg-z6RGCDSEQT5AhE1p .error-text…

LeetCode——查询后矩阵的和

目录 1、题目 2、题目解读 3、代码 1、题目 2718. 查询后矩阵的和 - 力扣(Leetcode) 给你一个整数 n 和一个下标从 0 开始的 二维数组 queries ,其中 queries[i] [typei, indexi, vali] 。 一开始,给你一个下标从 0 开始的…

【Leetcode】3. 无重复字符的最长子串

一、题目 1、题目描述 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 示例1: 输入: s = "abcabcbb" 输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例2: 输入: s = "bbbbb" 输出: 1 解释: …

RocketMQ一条消息从生产者到消费者的流程

目录 1. rocketmq 中的角色介绍 2. 一条消息从生产者到消费者的所有流程(简版) 3. 一条消息从生产者到消费者的所有流程 1. rocketmq 中的角色介绍 生产者 producer 生产、创造消息,会把消息发送到 broker 中消息代理服务 broker 负责消息…

I.MX RT1170之FlexSPI详解:FlexSPI基础知识和特性

最近我也在做RT1170的相关项目,由于项目需要,研究了Flash下载算法、NOR Flash空间的擦除/烧写(OTFAD XIP更新固件时要更新OTFAD Key Blob字段)、HyperRAM初始化等功能,这些都是开发过程中可能会遇到的一些问题,而这些都与FlexSPI接…