机器学习中的线性代数:奇异值分解 SVD

线性代数 奇异值分解(SVD)

参考资料:
超详细!彻底搞懂矩阵奇异值分解(SVD)本质+计算+应用!_哔哩哔哩_bilibili
非常好的视频,本文内容主要来自于该视频,在此表示感谢!

简单的实对称矩阵

我们从一个简单的对称矩阵开始说起:
A = [ 1 2 2 1 ] A = \left[ \begin{matrix} 1 & 2 \\ 2 & 1 \\ \end{matrix} \right] A=[1221]
我们有 A A A 这样的一个矩阵,一个二维向量 x x x 右乘 A A A 相当于进行了一次线性变换,但是这样并不简洁,从直观的角度上来说,既发生了旋转,也发生了拉伸,比如说 x 1 = ( 1 0 ) x_1 = \left( \begin{matrix}1\\0\end{matrix} \right ) x1=(10),就会得到 A x 1 = ( 1 2 ) Ax_1 = \left( \begin{matrix}1 \\ 2\end{matrix}\right) Ax1=(12),这里显然发生了“拉伸”,也发生了“旋转”,毕竟单一维度的向量已经到达了更高维度的情况。

在这样的思路下,我们尝试抽取一般性的“伸缩矩阵”和“旋转变换矩阵”

  • 伸缩变换(也就是只会沿着某个坐标轴的方向进行倍数变化):
    S = [ λ 1 λ 2 ] = d i a g { λ 1 , λ 2 } S = S T ,        λ 1 , λ 2 ≥ 0 S = \left[ \begin{matrix} \lambda_1 & &\\& & \lambda_2 \end{matrix} \right ] = {diag} \{ \lambda_1, \lambda_2\} \newline S = S^T, \;\;\;\lambda_1, \lambda_2 \ge 0 S=[λ1λ2]=diag{λ1,λ2}S=ST,λ1,λ20
    其中,经过简单验证,可以发现矩阵 S S S 可以保证只会坐标轴方向进行伸缩,其他情况同理

  • 旋转变换:对应到正交矩阵 Q Q Q
    Q T Q = Q Q T = E ,      Q − 1 = Q T Q^T Q=Q Q^T = E, \;\; Q^{-1} = Q^T QTQ=QQT=E,Q1=QT
    正交矩阵对应的就是不改变长度的情况下,向量的旋转变换

从 实对称矩阵 到 分解后的变换

对于 A A A 来说,旋转 -> 伸缩 -> 再旋转是一种比较自然的想法,
A = Q S Q T →    S = Q T A Q = Q − 1 A Q A = QSQ^T \rightarrow \; S = Q^T A Q = Q^{-1} A Q A=QSQTS=QTAQ=Q1AQ
我们先进行某种角度的旋转,待到伸缩变换之后,我们再进行反角度的旋转;
这里 S S S 是对角矩阵,且 Q T = Q − 1 Q^T = Q^{-1} QT=Q1所以 S S S A A A 一定是相似矩阵,这里我们求 S S S ,只需要求出特征值就可以;

但是这里需要注意的是:
我们要求: λ i ≥ 0 \lambda_i \ge 0 λi0 成立,代表的含义是某个维度上的放缩不可以进行反向放缩
但是 Q Q Q 还有其他要求,需要进行“矫正”操作,带后面会继续进行说明

为了使得 S S S 尽量具有唯一性和好的性质,我们常常将 S = d i a g { λ 1 ,    . . . ,    λ n } S=diag\{ \lambda_1, \;... ,\; \lambda_n\} S=diag{λ1,...,λn} 从大到小排列 这样尽量保证唯一性,并且在低秩近似矩阵中也有一定的应用

普通方阵的奇异值分解

对一个普通的方阵 A A A ,我们可以知道 A A T AA^T AAT 以及 A T A A^TA ATA 一定是对称矩阵,证明也很显然:
( A A T ) T = ( A T ) T ( A ) T = A A T (AA^T)^T = (A^T)^T (A)^T = AA^T (AAT)T=(AT)T(A)T=AAT
我们假设 A A A 是可以进行某种类型的分解的(这一点在这里没有证明):
A = P S Q T , P P T = P T P = E , Q Q T = Q T Q = E (1.1) A = P S Q^T, \qquad PP^T=P^TP=E, QQ^T=Q^TQ=E \tag{1.1} A=PSQT,PPT=PTP=E,QQT=QTQ=E(1.1)

A A T = P S Q T Q S T P = P S 2 P T A T A = Q S T P T P S Q T = Q S 2 Q T (1.2) AA^T = PSQ^T Q S^T P = P S^2 P^T \newline A^T A = Q S^T P^T P S Q^T = QS^2Q^T \tag {1.2} AAT=PSQTQSTP=PS2PTATA=QSTPTPSQT=QS2QT(1.2)

注意:尽管我们可以从 ( 1.1 ) (1.1) (1.1) 推导到 ( 1.2 ) (1.2) (1.2),但是二者并不是充要条件,也就是说 这里的 A T A = ( − Q ) S 2 ( − Q ) T A^TA = (-Q) S^2 (-Q)^T ATA=(Q)S2(Q)T 也是有可能出现的,因此,我们通过 ( 1.2 ) (1.2) (1.2) 求出来的特征值可以保证是正确的(直接开根号、取正数),但是特征向量还是需要进行 校正

具体来说,我们需要 ( 1.1 ) (1.1) (1.1) 的完全等价表示:
A = P S Q T ⇔ A Q = P S (1.3) A = PSQ^T \quad \Leftrightarrow \quad AQ = PS \tag{1.3} A=PSQTAQ=PS(1.3)
我们接下来,我们就可以用 ( 1.3 ) (1.3) (1.3) 进行校正,我们可以固定其中的 Q Q Q,默认它是正确的,然后重新解出来 P P P,此时也就可以保证正确性

从 方阵 到 m ∗ n m*n mn 矩阵

A m ∗ n = P m ∗ m    S m ∗ n    Q n ∗ n T (1.4) A_{m*n} = P_{m*m} \; S_{m*n} \; Q_{n*n}^T \tag{1.4} Amn=PmmSmnQnnT(1.4)

这里, P , Q P,Q P,Q 均为正交矩阵,这里假设 m < n m\lt n m<n S S S 需要满足这样的性质: S m ∗ n = ( J m ∗ m   ,    O ) S_{m*n} = (J_{m*m}\,,\;O) Smn=(Jmm,O) J J J 是对角矩阵;

这里可以思考这样一个问题:
如果说, J m ∗ m J_{m*m} Jmm 表示的是各个维度上的伸缩,那么 J m ∗ n J_{m*n} Jmn 表示了怎样的几何含义?

这里只对 A m ∗ n , m < n A_{m*n}, m \lt n Amn,m<n 的情况进行讨论,另一边可以用相似的方法:
A m ∗ n = P S Q T = P   ( J , O )   Q T A A T = P S S T P T = P J 2 P T A T A = Q S T S Q T = Q ( J O ) ( J O ) Q T = Q ( J 2 O O O ) Q T A_{m*n} = PSQ^T = P\,(J, O) \,Q^T \newline AA^T = PSS^TP^T = PJ^2P^T \newline A^TA = QS^TSQ^T = Q \left( \begin{matrix} J \\ O \end{matrix} \right) \left( \begin{matrix} J & O \end{matrix} \right)Q^T = Q \left( \begin{matrix}J^2 & O \\ O & O \end{matrix} \right)Q^T Amn=PSQT=P(J,O)QTAAT=PSSTPT=PJ2PTATA=QSTSQT=Q(JO)(JO)QT=Q(J2OOO)QT
这样求出公共的特征值,仍然需要进行校正操作,就可以得到最终答案

奇异值分解的实际应用

奇异值分解被广泛用于图像处理、低秩近似矩阵等领域,可以用来进行数据压缩等等;
比如说,一张 512 * 512 的图片,我们正常来说需要记录它的全部像素点,但是 A = P S Q T A = PSQ^T A=PSQT,而且我们可以逐个 S S S 的元素进行展开,
A = [ α 1 . . . α n ] d i a g { λ 1 , . . . , λ n } [ β 1 . . . β n ] T A = \left[ \begin{matrix} \alpha_1& ... &\alpha_n \end{matrix} \right] diag\{\lambda_1, ... ,\lambda_n \} \left[ \begin{matrix} \beta_1& ... &\beta_n \end{matrix} \right]^T A=[α1...αn]diag{λ1,...,λn}[β1...βn]T
这样我们可以发现,每一项一定是秩为1的,而且如果按照我们所说的 λ i \lambda_i λi 大的部分放的更靠前,那么我们就在一定程度上认为,前面的部分所占的权重更大,可能只取前面 200 项的时候,就基本能够近似表示原本的图片,这也就是所谓“低秩近似”,也就起到了压缩图片的作用

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/984311.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java【网络原理】(3)网络编程续

目录 1.前言 2.正文 2.1ServerSocket类 2.2Socket类 2.3Tcp回显服务器 2.3.1TcpEchoServer 2.3.2TcpEchoClient 3.小结 1.前言 哈喽大家好&#xff0c;今天继续进行计算机网络的初阶学习&#xff0c;今天学习的是tcp回显服务器的实现&#xff0c;正文开始 2.正文 在…

SpringMvc与Struts2

一、Spring MVC 1.1 概述 Spring MVC 是 Spring 框架的一部分&#xff0c;是一个基于 MVC 设计模式的轻量级 Web 框架。它提供了灵活的配置和强大的扩展能力&#xff0c;适合构建复杂的 Web 应用程序。 1.2 特点 轻量级&#xff1a;与 Spring 框架无缝集成&#xff0c;依赖…

web—HTML

什么是web ●Web:全球广域网&#xff0c;也称为万维网(www World Wide Web),能够通过浏览器访问的网站。 在浏览器中呈现精美的网页。 1.网页由那几部分组成&#xff1f; >文字、图片、视频、音频、超链接&#xff0c;&#xff0c;&#xff0c; 2.我们看到的网页&#xf…

php虚拟站点提示No input file specified时的问题及权限处理方法

访问站点&#xff0c;提示如下 No input file specified. 可能是文件权限有问题&#xff0c;也可能是“.user.ini”文件路径没有配置对&#xff0c;最简单的办法就是直接将它删除掉&#xff0c;还有就是将它设置正确 #配置成自己服务器上正确的路径 open_basedir/mnt/qiy/te…

INFINI Labs 产品更新 | Easysearch 增加异步搜索等新特性

INFINI Labs 产品更新发布&#xff01;此次更新&#xff0c;Easysearch 增加了新的功能和数据类型&#xff0c;包括 wildcard 数据类型、Point in time 搜索 API、异步搜索 API、数值和日期字段的 doc-values 搜索支持&#xff0c;Console 新增了日志查询功能。 INFINI Easyse…

关于OceanBase与CDH适配的经验分享

CDH是Cloudera早期推出的一个开源平台版本&#xff0c;它实质上成为了Apache Hadoop生态系统内公认的安装与管理平台&#xff0c;专为企业级需求量身打造。CDH为用户提供了即装即用的企业级解决方案。通过整合Hadoop与另外十多项关键开源项目&#xff0c;Cloudera构建了一个功能…

解决VScode 连接不上问题

问题 &#xff1a;VScode 连接不上 解决方案&#xff1a; 1、手动杀死VS Code服务器进程&#xff0c;然后重新尝试登录 打开xshell &#xff0c;远程连接服务器 &#xff0c;查看vscode的进程 &#xff0c;然后全部杀掉 [cxqiZwz9fjj2ssnshikw14avaZ ~]$ ps ajx | grep vsc…

[Python爬虫系列]bilibili

[Python爬虫系列]bilibili 具体逻辑 bv号 -> 处理多P视频 -> 拿到cid -> sign -> 请求下载&#xff0c;其中sign参考前人算法&#xff08;https://github.com/SocialSisterYi/bilibili-API-collect&#xff09; b站视频下载链接 https://api.bilibili.com/x/pl…

Linux——工具(3)git——版本控制器

一、git的使用意义 在实际项目中&#xff0c;我们往往写一个项目会经历很多个版本进行测试查缺补漏&#xff0c;然后再发行&#xff0c;但如果发行后我们发现仍出现问题&#xff0c;这时我们就需要撤回到上一个版本进行修改&#xff0c;可是如果我们此时不保存上一次的修改就不…

基于Python的商品销量的数据分析及推荐系统

一、研究背景及意义 1.1 研究背景 随着电子商务的快速发展&#xff0c;商品销售数据呈现爆炸式增长。这些数据中蕴含着消费者行为、市场趋势、商品关联等有价值的信息。然而&#xff0c;传统的数据分析方法难以处理海量、多源的销售数据&#xff0c;无法满足现代电商的需求。…

对WebSocket做一点简单的理解

1.概念 WebSocket 是基于 TCP 的一种新的网络协议。它实现了浏览器与服务器全双工通信——浏览器和服务器只需要完成一次握手&#xff0c;两者之间就可以创建持久性的连接&#xff0c; 并进行双向数据传输。 HTTP协议和WebSocket协议对比&#xff1a; HTTP是短连接 WebSocke…

【AI深度学习网络】Transformer时代,RNN(循环神经网络)为何仍是时序建模的“秘密武器”?

引言&#xff1a;什么是循环神经网络&#xff08;RNN&#xff09;&#xff1f; 循环神经网络&#xff08;Recurrent Neural Network, RNN&#xff09; 是一种专门处理序列数据&#xff08;如文本、语音、时间序列&#xff09;的深度学习模型。与传统神经网络不同&#xff0c;R…

蓝桥杯备考:图论初解

1&#xff1a;图的定义 我们学了线性表和树的结构&#xff0c;那什么是图呢&#xff1f; 线性表是一个串一个是一对一的结构 树是一对多的&#xff0c;每个结点可以有多个孩子&#xff0c;但只能有一个父亲 而我们今天学的图&#xff01;就是多对多的结构了 V表示的是图的顶点集…

01 SQl注入基础步骤(数字、字符、布尔盲注、报错)

目录 1、SQL注入漏洞的概要 2、SQL注入的常规思路 3、数字型注入 4、字符型注入 5、布尔盲注 6、报错注入 1、SQL注入漏洞的概要 原理&#xff1a;通过用户输入的数据未严格过滤&#xff0c;将恶意SQL语句拼接到原始查询中&#xff0c;从而操控数据库执行非预期操作。 …

【Linux】基础IO_文件系统基础

【Linux】基础IO_文件系统基础 文件目录 【Linux】基础IO_文件系统基础C语言文件IOC语言文件接口汇总什么是当前路径&#xff1f;默认打开的三个流 系统文件I/Oopenopen的第一个参数open的第二个参数open的第三个参数open的返回值 closewriteread 文件描述符fd文件描述符的分配…

批量删除 Excel 中的空白行、空白列以及空白表格

我们经常会碰到需要删除 Excel 文档表格中的空白行及空白列的场景&#xff0c;有一些空白行或空白列可能我们人工不好识别&#xff0c;因此删除空白行空白列对我们来讲就非常的繁琐&#xff0c;因为我们需要先识别哪些 Excel 文档中包含空白行或者空白列&#xff0c;我们才能够…

硬通货用Deekseek做一个Vue.js组件开发的教程

安装 Node.js 与 Vue CLI‌ npm install -g vue/cli vue create my-vue-project cd my-vue-project npm run serve 通过 Vue CLI 可快速生成项目骨架&#xff0c;默认配置适合新手快速上手 目录结构‌ src/ ├── components/ # 存放组件文件 │ └── …

第七课:Python反爬攻防战:Headers/IP代理与验证码

在爬虫开发过程中&#xff0c;反爬虫机制成为了我们必须面对的挑战。本文将深入探讨Python爬虫中常见的反爬机制&#xff0c;并详细解析如何通过随机User-Agent生成、代理IP池搭建以及验证码识别来应对这些反爬策略。文章将包含完整的示例代码&#xff0c;帮助读者更好地理解和…

OSPF:虚链路

一、虚链路概念 在OSPF中&#xff0c;虚链路&#xff08;Virtual Link&#xff09; 是一种逻辑连接&#xff0c;用于解决因网络设计或扩展导致的区域无法直接连接到骨干区域&#xff08;Area 0&#xff09;的问题。它是通过中间区域&#xff08;Transit Area&#xff09;在两个…

openharmory-鸿蒙生态设备之间文件互传发现、接入认证和文件传输

软件版本 OpenHarmony系统版本基线&#xff1a;基于 OpenHarmony-v5.0.0-Release。 图库应用版本&#xff1a;基于OpenHarmony-v5.0.0-Release。 文件管理器应用版本&#xff1a;基于OpenHarmony-v5.0.0-Release。 7 用户历程图 8 设备发现 8.1 设备交互流程图 8.2 设备发…