PCA、LDA、Kmeans、SVD/EVD、谱聚类之间的关系

2024-01-20 17:58

本文主要是介绍PCA、LDA、Kmeans、SVD/EVD、谱聚类之间的关系,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

PCA、LDA、Kmeans、SVD/EVD、谱聚类之间的关系

 最近在研究谱聚类时,迁移到主成分分析(PCA),发现两者有着惊人的相似之处,同时还牵扯到Kmeans、SVD,甚至LDA也有相通的地方(虽然LDA是有监督学习),因此在这里写一篇总结,描述一下以上各个模型之间的共通性,有助于加深对这一类无监督学习算法的理解。


PCA与SVD/EVD的关系

  首先,从SVD入手:

X(d×N)=UΣVTXXT=UΛUT X ( d × N ) = U Σ V T → X X T = U Λ U T

UTXXTU=Λ U T X X T U = Λ

  然后,这是PCA的目标:

minWs.t.WTXXTWWTW=I min W W T X X T W s . t . W T W = I

  因此PCA的实现,既可以对协方差矩阵 XXT(d×d) X X ( d × d ) T 做特征值分解,也可以直接对 X X 做奇异值分解。


Kmeans与SVD/EVD的关系

  首先从SVD出发:

X(d×N)=UΣVTXTX=VΛVT

VTXTXV=Λ V T X T X V = Λ

  然后看Kmeans。Kmeans对误差的分布有要求,即要求误差服从标准正态分布,因此,Kmeans在处理非标准正态分布的数据集时,聚类效果会比较差。Kmeans聚类的每一次迭代,是根据现有的 k k 个类中心,样本根据自身与中心的距离判断类归属,然后计算出每一个类的中心进入下一次迭代。由于Kmeans的核心是基于样本与类中心的欧式距离,伊霓裳可以将Kmeans聚类的目标理解为:划分K个类 C=C1,C2,,CK C = C 1 , C 2 , ⋯ , C K ,使得各类样本到各自类中心的欧式距离之和最小。

===minCkiCk||xiμk||22minCkiCk(xTixi2xTiμk+μTkμk)minC(ixTixik1nki,jCkxTixj)minC(Tr(XTX)Tr(HXTXH)) min C ∑ k ∑ i ∈ C k | | x i − μ k | | 2 2 = min C ∑ k ∑ i ∈ C k ( x i T x i − 2 x i T μ k + μ k T μ k ) = min C ( ∑ i x i T x i − ∑ k 1 n k ∑ i , j ∈ C k x i T x j ) = min C ( T r ( X T X ) − T r ( H X T X H ) )

maxHs.t.Tr(HTXTXH)HTH=IK×K ⇔ max H T r ( H T X T X H ) s . t . H T H = I K × K

  这里需要引入指示矩阵 HN×K H N × K ,它是正交矩阵:

Hij={1Nk0xiCjxiCj H i j = { 1 N k x i ∈ C j 0 x i ∉ C j

  我们先把服从上面这个定义的指示矩阵称为“正经的”指示矩阵,因为接下来会有松弛化的。
  那么Kmeans在做的其实就是遍历所有划分,但这是一个NP hard问题,所以它选择从一个出发点(初始值)按照一种规则(要求每个样本被归到距离最近的一类中)迭代分割方案,构造出不同的 H H ,直到收敛。
虽然Kmeans在这里推导出来的目标形式上和上面的SVD推出的表达式是一样的,但Kmeans实际上并没有做SVD。可以理解为Kmeans的解H是离散且正交的。
  另一方面,我们还可以将 XTX X T X 看做线性内积核函数计算的相似度矩阵,即将Kmeans的目标函数推广为 minTr(HTSH) min T r ( H T S H ) ,这里 S=XTX S = X T X 。而Kernel-Kmeans不使用欧式距离作为相似性测度,而是使用核函数计算相似度,即 S=ϕ(x)Tϕ(x) S = ϕ ( x ) T ϕ ( x ) ,例如高斯RBF K(xi,xj)=exp((xixj)2/2σ2) K ( x i , x j ) = e x p ( − ( x i − x j ) 2 / 2 σ 2 )


PCA与Kmeans的关系

  如上所述,Kmeans是一个有贼心没贼胆的怂货,因为限定了 H H 的形式,所以它只能是离散取值的,于是Kmeans只能乖乖地在各种正经的指示矩阵之间跳转,直到找到最佳方案。如果再进一步,无视H的离散性,而是直接去对相似度矩阵 XTX X T X 做特征值分解,根据瑞利熵的性质,取若干最大特征值对应的特征向量拼起来就是 H H 了,只是现在算出来的H不再像“正经”定义的那样,它可能统一行里有多个取值,甚至可能取负数,但是它就是满足Kmeans最优化目标的条件。
  现在看看PCA,Kmeans和PCA有什么联系呢?PCA做了Kmeans不敢做的事情,特征值分解。根据上面的分析,当Kmeans的相似性度量取欧式距离时,对数据进行奇异值分解后的左右矩阵就有了特殊的意义: U=W U = W V=H V = H

X=UΣVT=WΣHTH=XTWΣ X = U Σ V T = W Σ H T → H = X T W Σ

  我们来看一下PCA计算的松弛化指示矩阵 H H 有什么意义。首先,XTW可以看做是将 X X 进行一次正交变换,它将数据从原始空间变换到一个新的空间,数据在这里的投影方差最大化了。接着,XTWΣ可以看做是对变换后的数据各维度分别进行缩放,这个可以忽略不计。因此,Kmeans的簇的指示矩阵 H H (松弛化)实际上就是PCA投影之后的数据,可以说PCA实际上是在进行一种松弛化的Kmeans聚类。虽然PCA是在找正交变换,Kmeans是在划分簇类,但它们在做的几乎是同一件事情。


Kmeans与谱聚类的关系

  谱聚类中RatioCut是对拉普拉斯矩阵L进行特征值分解(目标为 minHHTLH min H H T L H ),NCult则是对标准化过的拉普拉斯矩阵 D1/2LD1/2 D − 1 / 2 L D − 1 / 2 做特征值分解(目标为 minHHTD1/2LD1/2H min H H T D − 1 / 2 L D − 1 / 2 H ),但两个矩阵都可以看做是一种相似性矩阵。与Kmeans类似,谱聚类里的 H H 也是指示矩阵,但与Kmeans不同,谱聚类选择无视H的离散约束,对相似度矩阵(拉普拉斯矩阵)进行特征值分解,得到松弛化的 H H 。由上面的分析可知,H是原始数据 X X 映射到新空间后的结果,虽然它是松弛化的指示变量,但并不能直接用来指示聚类结果。最后还需要用H作为数据继续Kmeans聚类,得到最终结果。
  我认为谱聚类相当于Kernel Kmeans+松弛化指示矩阵,因为谱聚类的相似度矩阵使用拉普拉斯矩阵(我认为这里相似度矩阵、邻接矩阵、拉普拉斯矩阵是等价的),所以是核化的。
  谱聚类的突破有两点,首先没有限制相似性度量用欧氏距离,而是用拉普拉斯矩阵将相似度扩展为任意函数。其次,它将原问题(NP难)松弛化,用特征值分解的方式获得样本在新空间中的表达。


谱聚类与PCA的关系

  谱聚类的流程有点像:首先将原始数据映射到一个新的空间,然后做Kmeans。我认为谱聚类的前半部分相当于Kernel PCA。Kernel PCA对核函数映射过的相似度矩阵(原本是协方差)进行特征值分解,而谱聚类对拉普拉斯矩阵(也是相似度)进行特征值分解。如果说普通PCA是将原始数据进行正交变换映射到新的空间,那么谱聚类和Kernel PCA就是对原始数据进行某种非线性变换映射到新的空间。
  很多时候对数据进行线性变换仍然无法获得良好的可分性,但引入非线性性则可能做得到,这也是核方法存在的意义,从这个角度上看谱聚类,它就是核化的PCA+Kmeans聚类。


PCA与LDA的关系

  LDA(线性判别分析)是带label的,它是有监督学习,要求投影后同一类别的投影点尽可能接近,不同各类别的类中心之间既可能远。对于普通的二类LDA,假设有两类,类均值(中心) μj μ j ,类协方差 Covj C o v j

μj=1NjxCjx μ j = 1 N j ∑ x ∈ C j x

Covj=xCj(xμj)(xμj)T C o v j = ∑ x ∈ C j ( x − μ j ) ( x − μ j ) T

于是定义定义类内散度和类间散度:

Sw=Cov1+Cov2|Sb=(μ1μ2)(μ1μ2)T S w = C o v 1 + C o v 2 | S b = ( μ 1 − μ 2 ) ( μ 1 − μ 2 ) T

投影后类中心间距:

||wTμ1wTμ2||2=wT(μ1μ2)(μ1μ2)Tw=wTSbw | | w T μ 1 − w T μ 2 | | 2 = w T ( μ 1 − μ 2 ) ( μ 1 − μ 2 ) T w = w T S b w

投影后类内方差:

wTCov1w+wTCov2w=wTSww w T C o v 1 w + w T C o v 2 w = w T S w w

因此目标是:

argmaxwJ(w)=wTSbwwTSww arg ⁡ max w J ( w ) = w T S b w w T S w w

  PCA的目标是一个瑞利熵,LDA的目标则是一个广义瑞利熵,他们的求解是类似的,都是对某个矩阵进行特征值分解,从而得到变换基。从原理上,PCA仅在最大化类间距离,但PCA中的“类”,是指每一个特征维度。


参考资料

PCA,Kmeans,NMF和谱聚类之间的联系
聚类–谱聚类
降维–主成分分析(PCA)
线性判别分析LDA原理总结

这篇关于PCA、LDA、Kmeans、SVD/EVD、谱聚类之间的关系的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/626830

相关文章

day-51 合并零之间的节点

思路 直接遍历链表即可,遇到val=0跳过,val非零则加在一起,最后返回即可 解题过程 返回链表可以有头结点,方便插入,返回head.next Code /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}*

线性代数|机器学习-P36在图中找聚类

文章目录 1. 常见图结构2. 谱聚类 感觉后面几节课的内容跨越太大,需要补充太多的知识点,教授讲得内容跨越较大,一般一节课的内容是书本上的一章节内容,所以看视频比较吃力,需要先预习课本内容后才能够很好的理解教授讲解的知识点。 1. 常见图结构 假设我们有如下图结构: Adjacency Matrix:行和列表示的是节点的位置,A[i,j]表示的第 i 个节点和第 j 个

POJ1269 判断2条直线的位置关系

题目大意:给两个点能够确定一条直线,题目给出两条直线(由4个点确定),要求判断出这两条直线的关系:平行,同线,相交。如果相交还要求出交点坐标。 解题思路: 先判断两条直线p1p2, q1q2是否共线, 如果不是,再判断 直线 是否平行, 如果还不是, 则两直线相交。  判断共线:  p1p2q1 共线 且 p1p2q2 共线 ,共线用叉乘为 0  来判断,  判断 平行:  p1p

pip-tools:打造可重复、可控的 Python 开发环境,解决依赖关系,让代码更稳定

在 Python 开发中,管理依赖关系是一项繁琐且容易出错的任务。手动更新依赖版本、处理冲突、确保一致性等等,都可能让开发者感到头疼。而 pip-tools 为开发者提供了一套稳定可靠的解决方案。 什么是 pip-tools? pip-tools 是一组命令行工具,旨在简化 Python 依赖关系的管理,确保项目环境的稳定性和可重复性。它主要包含两个核心工具:pip-compile 和 pip

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟)

【每日一题】LeetCode 2181.合并零之间的节点(链表、模拟) 题目描述 给定一个链表,链表中的每个节点代表一个整数。链表中的整数由 0 分隔开,表示不同的区间。链表的开始和结束节点的值都为 0。任务是将每两个相邻的 0 之间的所有节点合并成一个节点,新节点的值为原区间内所有节点值的和。合并后,需要移除所有的 0,并返回修改后的链表头节点。 思路分析 初始化:创建一个虚拟头节点

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering)

Spark MLlib模型训练—聚类算法 PIC(Power Iteration Clustering) Power Iteration Clustering (PIC) 是一种基于图的聚类算法,用于在大规模数据集上进行高效的社区检测。PIC 算法的核心思想是通过迭代图的幂运算来发现数据中的潜在簇。该算法适用于处理大规模图数据,特别是在社交网络分析、推荐系统和生物信息学等领域具有广泛应用。Spa

linux中使用rust语言在不同进程之间通信

第一种:使用mmap映射相同文件 fn main() {let pid = std::process::id();println!(

O(n)时间内对[0..n^-1]之间的n个数排序

题目 如何在O(n)时间内,对0到n^2-1之间的n个整数进行排序 思路 把整数转换为n进制再排序,每个数有两位,每位的取值范围是[0..n-1],再进行基数排序 代码 #include <iostream>#include <cmath>using namespace std;int n, radix, length_A, digit = 2;void Print(int *A,

用Pytho解决分类问题_DBSCAN聚类算法模板

一:DBSCAN聚类算法的介绍 DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种基于密度的聚类算法,DBSCAN算法的核心思想是将具有足够高密度的区域划分为簇,并能够在具有噪声的空间数据库中发现任意形状的簇。 DBSCAN算法的主要特点包括: 1. 基于密度的聚类:DBSCAN算法通过识别被低密

16 子组件和父组件之间传值

划重点 子组件 / 父组件 定义组件中:props 的使用组件中:data 的使用(有 return 返回值) ; 区别:Vue中的data (没有返回值);组件方法中 emit 的使用:emit:英文原意是:触发、发射 的意思components :直接在Vue的方法中声明和绑定要使用的组件 小炒肉:温馨可口 <!DOCTYPE html><html lang="en"><head><