| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> 【数据聚类】第八章第二节:谱聚类算法之切图聚类、算法流程及其实现 -> 正文阅读 |
|
[人工智能]【数据聚类】第八章第二节:谱聚类算法之切图聚类、算法流程及其实现 |
本文部分内容源自刘建平博客,在此基础上进行总结拓展 一:谱聚类与图划分无向图切图:谱聚类算法根据数据点之间的相似度将数据点划分到不同簇中,因此将数据点映射到无向图之后,可以转化为图划分的问题。对于无向图 G G G,切图的目标是将图 G ( V , E ) G(V,E) G(V,E)切分成互相无连接 k k k个子图,其中
可以看出, c u t cut cut描述了子图之间的相似性, c u t cut cut越小那么子图的差异性就越大。但是 c u t ( A 1 , A 2 , . . . , A k ) = 1 2 ∑ i = 1 k W ( A i , A ˉ i ) cut(A_{1},A_{2},...,A_{k})=\frac{1}{2}\sum\limits_{i=1}^{k}W(A_{i},\bar A_{i}) cut(A1?,A2?,...,Ak?)=21?i=1∑k?W(Ai?,Aˉi?)在划分子图时并没有考虑每个子图中节点的个数。所以在某些情况下,最小化 c u t ( A 1 , A 2 , . . . , A k ) cut(A_{1},A_{2},...,A_{k}) cut(A1?,A2?,...,Ak?)可能会把一个数据点或是很少数据点看做一个子图,导致子图划分结果不平衡
(1)比例割引入指示向量(点击可查看指示向量定义) h j ∈ { h 1 , h 2 , . . . , h k } h_{j}\in\{h_{1},h_{2},...,h_{k}\} hj?∈{h1?,h2?,...,hk?}, j = 1 , 2 , . . . , k j=1,2,...,k j=1,2,...,k。对于任意一个向量 h j h_{j} hj?,它是一个 n n n维向量( n n n表示样本数),定义 h i j h_{ij} hij?如下 h i j = { 0 , v i ? A j ∣ A j ∣ , v i ∈ A j h_{ij}=\begin{cases} 0,v_{i}\notin A_{j}\\ \sqrt{|A_{j}|},v_{i}\in A_{j}\\ \end{cases} hij?={0,vi?∈/Aj?∣Aj?∣?,vi?∈Aj?? 于是,对于 h i T L h i h_{i}^{T}Lh_{i} hiT?Lhi?,根据拉普拉斯矩阵性质可知
h i T L h i = 1 2 ∑ m = 1 ∑ n = 1 w m n ( h i m ? h i n ) 2 = c u t ( A i , A ˉ i ) ∣ A i ∣ h_{i}^{T}Lh_{i}=\frac{1}{2}\sum\limits_{m=1}\sum\limits_{n=1}w_{mn}(h_{im}-h_{in})^{2}=\frac{cut(A_{i},\bar A_{i})}{|A_{i}|} hiT?Lhi?=21?m=1∑?n=1∑?wmn?(him??hin?)2=∣Ai?∣cut(Ai?,Aˉi?)?
可以看到,对于某一个子图 i i i, R a t i o n C u t RationCut RationCut就对应于 h i T L h i h_{i}^{T}Lh_{i} hiT?Lhi?,那么对于 k k k个子图 R a t i o C u t ( A 1 , A 2 , . . . , A k ) = ∑ i = 1 k h i T L h i = ∑ i = 1 k ( H T L H ) i i = t r ( H T L H ) RatioCut(A_{1},A_{2},...,A_{k})=\sum\limits_{i=1}^{k}h_{i}^{T}Lh_{i}=\sum\limits_{i=1}^{k}(H^{T}LH)_{ii}=tr(H^{T}LH) RatioCut(A1?,A2?,...,Ak?)=i=1∑k?hiT?Lhi?=i=1∑k?(HTLH)ii?=tr(HTLH) 因此, R a t i o n C u t RationCut RationCut切图本质就是最小化 t r ( H T L H ) tr(H^{T}LH) tr(HTLH)。又因为 H T H = I H^{T}H=I HTH=I(单位矩阵),则切图优化目标为 a r g m i n ? H t r ( H T L H ) s . t . H T H = I \underbrace{argmin}_{H} tr(H^{T}LH) s.t.H^{T}H=I H argmin??tr(HTLH)s.t.HTH=I 对于优化目标 t r ( H t L H ) tr(H^{t}LH) tr(HtLH)中的每一个优化子目标 h i T L h i h_{i}^{T}Lh_{i} hiT?Lhi?,其中的 h h h是单位正交基, L L L为对称矩阵,所以此时 h i T L h i h_{i}^{T}Lh_{i} hiT?Lhi?的最大值即为 L L L的最大特征值、最小值即为 L L L的最小特征值。而在谱聚类中,我们的目标就是要找到目标的最小特征值,得到对应特征值向量,此时切图效果最佳。所以对于 h i T L h i h_{i}^{T}Lh_{i} hiT?Lhi?,目标就是找到 L L L的最小特征值,而对于 t r ( H t L H ) = ∑ i = 1 k h i T L h i tr(H^{t}LH)=\sum\limits_{i=1}^{k}h_{i}^{T}Lh_{i} tr(HtLH)=i=1∑k?hiT?Lhi?,则目标就是要找到 k k k个最小的特征值 因此,通过找到 L L L的最小的 k k k个特征值,可以得到对应的 k k k个特征向量,这 k k k特特征向量组成一个 n n n× k k k维矩阵,也即 H H H。一般需要对矩阵 H H H按行做标准化,如下
h i j ? = h i j ( ∑ t = 1 k h i t 2 ) 1 2 h_{ij}^{*}=\frac{h_{ij}}{(\sum\limits_{t=1}^{k}h_{it}^2)^{\frac{1}{2}}} hij??=(t=1∑k?hit2?)21?hij?? 这里需要注意,降维后导致得到的指示向量 h h h对应的 H H H现在并不能完全指示各样本的归属,因此一般在得到 n × k n×k n×k维的矩阵 H H H后还需要对每一行进行一次传统的聚类,比如使用K-Means聚类 (2)规范割(常用)规范割和比例割类似,只是把比例割的分母 ∣ A i ∣ |A_{i}| ∣Ai?∣换成了 v o l ( A i ) vol(A_{i}) vol(Ai?),定义指示向量 h i j h_{ij} hij?如下 h i j = { 0 , v i ? A j v o l ( A i ) , v i ∈ A j h_{ij}=\begin{cases} 0,v_{i}\notin A_{j}\\ \sqrt{vol(A_{i})},v_{i}\in A_{j}\\ \end{cases} hij?={0,vi?∈/Aj?vol(Ai?)?,vi?∈Aj?? 于是,对于 h i T L h i h_{i}^{T}Lh_{i} hiT?Lhi?,根据拉普拉斯矩阵性质可知
h i T L h i = 1 2 ∑ m = 1 ∑ n = 1 w m n ( h i m ? h i n ) 2 = c u t ( A i , A ˉ i ) v o l ( A i ) h_{i}^{T}Lh_{i}=\frac{1}{2}\sum\limits_{m=1}\sum\limits_{n=1}w_{mn}(h_{im}-h_{in})^{2}=\frac{cut(A_{i},\bar A_{i})}{vol(A_{i})} hiT?Lhi?=21?m=1∑?n=1∑?wmn?(him??hin?)2=vol(Ai?)cut(Ai?,Aˉi?)?
可以看到,对于某一个子图 i i i, R a t i o n C u t RationCut RationCut就对应于 h i T L h i h_{i}^{T}Lh_{i} hiT?Lhi?,那么对于 k k k个子图 N C u t ( A 1 , A 2 , . . . , A k ) = ∑ i = 1 k h i T L h i = ∑ i = 1 k ( H T L H ) i i = t r ( H T L H ) NCut(A_{1},A_{2},...,A_{k})=\sum\limits_{i=1}^{k}h_{i}^{T}Lh_{i}=\sum\limits_{i=1}^{k}(H^{T}LH)_{ii}=tr(H^{T}LH) NCut(A1?,A2?,...,Ak?)=i=1∑k?hiT?Lhi?=i=1∑k?(HTLH)ii?=tr(HTLH) 但此时 H T H =? I H^{T}H \not=I HTH=I,而是 H T D H = I H^{T}DH =I HTDH=I
因此,此时切图优化目标为 a r g m i n ? H t r ( H T L H ) s . t . H T D H = I \underbrace{argmin}_{H} tr(H^{T}LH) s.t.H^{T}DH=I H argmin??tr(HTLH)s.t.HTDH=I 但是现在矩阵
H
H
H中的指示向量
h
h
h并不是标准正交基,所以需要对
H
H
H做一定转换。令
H
=
D
?
1
2
F
H=D^{-\frac{1}{2}}F
H=D?21?F,则
H
T
L
H
=
F
T
D
?
1
2
L
D
?
1
2
F
H^{T}LH=F^{T}D^{-\frac{1}{2}}LD^{-\frac{1}{2}}F
HTLH=FTD?21?LD?21?F、
H
T
D
H
=
F
T
F
=
I
H^{T}DH=F^{T}F=I
HTDH=FTF=I,于是优化目标变更为 现在,和比例割一样,通过找到 D ? 1 2 L D ? 1 2 D^{-\frac{1}{2}}LD^{-\frac{1}{2}} D?21?LD?21?(就是之前的 L L L)的最小的 k k k个特征值,可以得到对应的 k k k个特征向量,这 k k k特征向量组成一个 n n n× k k k维矩阵,也即 F F F,最后对 F F F进行传统聚类
二:谱聚类算法流程给定数据集 D = { x 1 , x 2 , . . . , x n } D=\{x_{1}, x_{2}, ... , x_{n}\} D={x1?,x2?,...,xn?}
三:Python实现
(高斯核函数) (K邻近法) 四:谱聚类算法优缺点(1)优点
(2)缺点
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/25 22:33:44- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |