当前位置: 首页 > news >正文

【学习记录】PCA主成分分析 SVD奇异值分解

在看MSC-VO代码的过程中,大量出现了奇异值分解的内容,本身对这部分了解不多,这里补一下课,参考b站up主小旭学长的视频,链接为:PCA主成分分析和SVD主成分分析

PCA主成分分析

PCA根本目的在于让数据在损失尽可能小的前提下,降低数据的维度。比如将三维数据降低到二维,那么就是要在空间中找一个平面,让3d点在2d平面上的投影尽可能保持原来3d空间下的分布。将这个概念推广一下,PCA的任务也就是找一个新的坐标系,让原数据在新坐标系下的投影损失尽可能小,而这个新的坐标系的寻找方法,我们就要依赖于方差这一概念。这里我们可以这样去理解,方差衡量的是数据的密集程度,方差小意味着这一大堆数据几乎就是集中在一小撮,这样必然会导致数据的差异性变得很模糊,因此我们在进行降维时,需要寻找的坐标系最好是方差尽可能大的,从而能让数据降维后分布尽量分散。因此这里我们要寻找的这个坐标系,就是原数据中方差最大的方向。
在这里插入图片描述
在进行坐标系的寻找之前,我们需要对原始数据做一个中心化的操作,也就是将坐标原点移动到数据的分布中心,这主要是为了更好地寻找方差最大的方向。移动到中心后,就需要进行一系列的推导,这里我们假定最后的处理结果数据符合高斯分布,根据线性代数中数据的拉伸和旋转的写法,拉伸等于左乘一个对角阵,旋转等于左乘一个三角函数构成的矩阵,数据的处理前后本身就可以用旋转和拉伸来表示。
在这里插入图片描述
上图描述的是原始数据和最终结果之间通过旋转和拉伸的转换关系,在这个问题中,我们并不知道旋转和拉伸的幅度,所以问题变为如何求R和S。在求R和S的过程中,我们需要利用协方差矩阵COV,协方差用于表示两个变量在变化过程中的关联关系,协方差为正表示两个量是正相关,反之为负相关,如果为零则表示两个量相互无关。根据协方差矩阵的定义,我们可以得到下面的化简公式:
在这里插入图片描述
从这个公式可以看出,协方差矩阵的计算依赖于原数据构成的矩阵,这里为了方便我们统一以二维举例,那么最后的x1 x2 y1 y2表示的就是二维坐标下的点,我们将其记录为数据矩阵D。而在前面我们得到了原始数据和处理结果之间基于旋转R和拉伸S的转换关系,那么带入后可以继续往后写。
在这里插入图片描述
在这个过程中主要有这么几步需要解释一下,首先右上角加’表示的是最终结果,这个与前面的推导稍微有点不同但是一个意思。在第四行,括号内对应的刚好是目标坐标系的协方差矩阵,因此括号的内容在第五行合成为了C’,由于前面我们假定了目标坐标系的数据在两个方向都符合高斯分布,所以协方差矩阵为单位矩阵,所以在第六行可以直接消去C’,从而得到最后的计算结果。由于S本身是一个对角阵,因此转置与否都不发生变化,而且R本身是一个正交矩阵,R的转置与逆矩阵相等,所以我们进行如下的操作。
在这里插入图片描述
从最终结果来看,这个结果其实对应了考研数学中老生常谈的矩阵对角化,C表示的是原始数据的协方差矩阵,L本身为对角阵,因此就是由特征值组成的对角矩阵,R则为特征向量拼成的矩阵。所以我们要求R和S,就需要先计算原始数据的协方差矩阵,对这个矩阵做对角化,结果的特征向量组成的矩阵就是旋转R,特征值对角阵开方得到的就是拉伸S。

SVD奇异值分解

SVD本身和矩阵对角化是相通的,矩阵对角化要求矩阵必须是一个方阵,这个时候可以计算出特征值和特征向量,而当矩阵本身不是方阵时,我们就无法计算特征值与特征向量,与之相对应的就变成奇异值,当矩阵为方阵的时候,奇异值和特征值就是一个东西。类似于对角化,奇异值分解本身也是要寻找矩阵,由于不是方阵,这里目标变成了三个矩阵。
在这里插入图片描述
奇异值分解的过程本身也可以用拉伸旋转的理论来解释,我们将M看作是一个线性变换,我们希望找到一个基,这个基在线性变换前后依然可以保持正交,这个就是SVD的主要任务。假设V是原始域的标准正交基,U是经过M变换后的标准正交基,由于SVD本身要求变换前后保持正交即可,所以结果的U不一定是标准正交基,这里额外补充一个伸缩б1和б2用于实现这个正交的对齐。那么我们可以写出下面的等式:
在这里插入图片描述
得到了M的表示,那么我们可以继续进行后续的推理:
在这里插入图片描述
在这部分公式中,左侧第三行到第四行中,由于U本身表示的是标准正交基组成的矩阵,其转置右乘原矩阵等于单位矩阵,因此在这一步中进行了消去,第四行中的操作和前面PCA的过程基本相似,∑本身不一定是方阵,但其依然符合主对角线上有元素其余位置均为零,所以依然可以整合为一个平方的矩阵,这里就是记作了L,也就是到了第五行的位置,在第五行中,L已经变成了一个方阵,公式左侧也是一个方阵,这时等式的形式就转变为了矩阵对角化的结果,左侧是原矩阵,右侧的L为特征值组成的对角矩阵,V表示特征向量组成的矩阵,所以对MTM和MMT分别进行对角化,就可以计算出线性变化前后的两个基底,对特征值矩阵进行开方,就可以得到伸缩系数。
在这里插入图片描述

PCA与SVD的关系

在PCA中我们需要的旋转R和SVD中的V是一样的,也就是说SVD的V就是PCA的主成分的方向。
在这里插入图片描述
这二者之间的关系主要通过这个V矩阵进行联系,PCA需要先计算协方差矩阵,计算量可能会比较大,反过来用SVD的话,可以不计算协方差矩阵直接求出V。

http://www.lryc.cn/news/2684.html

相关文章:

  • 用 Python 调用 GPT-3 API
  • 类和对象实操之【日期类】
  • 微搭中如何实现弹性布局
  • 九龙证券|外资强势出手!这只科创板百元股,被疯狂加仓
  • 51单片机最强模块化封装(4)
  • 五、Git本地仓库基本操作——分支管理
  • vscode搭建python Django网站开发环境
  • 【mybatis】实现分页查询
  • CF1560D Make a Power of Two 题解
  • C#开发的OpenRA的读取文件的函数
  • SpringBoot结合XXL-JOB实现定时任务
  • 【Node.js】 创建web服务器
  • 基于go语言实现RestFul交互
  • 情感溢出:读《浣溪沙》
  • 深入解读.NET MAUI音乐播放器项目(一):概述与架构
  • 【Python小游戏】某程序员将套圈游戏玩儿到了巅峰,好嗨哟~Pygame代码版《牛牛套圈》已上线,大人的套圈游戏太嗨了,小孩勿进。
  • php的declare命令如何使用?
  • 嵌软工程师要掌握的硬件知识2:一文看懂什么开漏和推挽电路(open-drain / push-pull)
  • 1.2.6存储结构-磁盘管理:单缓冲区与双缓冲区读取、流水线周期、计算流水线执行时间
  • 【pytest接口自动化测试】结合单元测试框架pytest+数据驱动模型+allure
  • 展锐平台WIFI吞吐问题解决方案
  • 全局向量的词嵌入(GloVe)
  • 华为OD机试 - 特异性双端队列(Python),真题含思路
  • 【Linux】操作系统进程概念
  • C语言const的用法详解
  • Day886.MySQL的“饮鸩止渴”提高性能的方法 -MySQL实战
  • 08- 数据升维 (PolynomialFeatures) (机器学习)
  • 2023备战金三银四,Python自动化软件测试面试宝典合集(二)
  • 笔试题-2023-紫光展锐-数字芯片设计【纯净题目版】
  • WordPress网站日主题Ri主题RiProV2主题开启了验证码登录但是验证码配置不对结果退出登录后进不去管理端了