超详细解释奇异值分解(SVD)【附例题和分析】

news2025/1/23 17:44:27

目录

一. 矩阵对角化

二. 奇异值分解

三. 对比奇异值分解与特征值分解

四. SVD分解与四大基础子空间

五. SVD分解的正交矩阵

六. 方阵与SVD分解

七. 单位特征向量与SVD分解

八. 例题分析:秩为1

九. 例题分析:秩为2

十. 计算机网络与矩阵的秩


一. 矩阵对角化

线性代数中,常出现把矩阵进行对角化的过程,然后将其应用于简化计算,解方程等等。但是,只有对称矩阵才可以对角化。另外,方阵才有特征值和特征向量的说法。

给定m行n列的矩阵A,如下方程:

Ax=b

该方程可能有一个解,可能有无数个解,也可能会出现无解的情况。

但我们知道A^TAAA^T都是方阵,且都是半正定矩阵,所以可以对角化而且特征值都大于等于0。于是,以上方程有解:

A^TAx=A^Tb

二. 奇异值分解

奇异值分解,singular value decomposition,通常简写为SVD分解。

备注:建议看这部分知识的小伙伴可以先看矩阵的LU分解,QR分解。

已知正定矩阵(positive definite matrix),如果我们想分析它的特征值和特征向量,可将其分解为如下:

Q\Lambda Q^T

其中\Lambda为对角矩阵,即为原始矩阵的特征值。Q为特征向量形成矩阵,如果原始矩阵为对称矩阵,矩阵Q可为标准正交矩阵,满足如下:

QQ^T=I

但,当矩阵非方阵(rectangular matrix),以上分解是行不通的,因为该矩阵没有特征值这一概念的。

由此,便出现了对矩阵进行SVD分解,通式如下:

A=U\Sigma V^T

其中\Sigma为对角阵(非方阵),将其对角线处非零的元素记为\sigma_1,\cdots,\sigma_r,此对角矩阵有两种理解方式:

  1. A^TA的特征值;
  2. A的奇异值(singular value)

主对角线处的元素个数与原始矩阵A的秩有关。

备注:此处的矩阵A可以是任意矩阵,但A^TAAA^T都一定为方阵。所以经常会利用这两个方阵来理解奇异值和特征值的区别。

对任意m行n列的矩阵A,奇异值分解的综合理解如下:

正交矩阵U:m行m列,该矩阵的每一个列向量都是AA^T的特征向量;

正交矩阵V:n行n列,该矩阵的每一个列向量都是A^TA的特征向量;

对角阵\Sigma:m行n列,将A^TAAA^T的特征值开根号,得到的就是该矩阵主对角线上的元素,也可以看成矩阵A的奇异值。

三. 对比奇异值分解与特征值分解

对于正定矩阵来讲,以上讨论的\Sigma\Lambda是一样的,U\Sigma V^TQ\Lambda Q^T是一样的。

对于非正定矩阵(要求是对称矩阵),此时\Lambda会出现负数,但\Sigma依旧为正数。

推广到复数矩阵,对于SVD分解A=U\Sigma V^H,此时的U和V即为酉矩阵(unitary),满足如下:

U^HU=I,\quad V^HV=I

其中,U^HV^H代表共轭转置。

\Sigma中的元素依旧为实数。

四. SVD分解与四大基础子空间

对于任意矩阵有四个非常重要的子空间:列空间(column space),行空间(row space),左零空间(left nullspace),零空间(nullspace)。

假定某m行n列矩阵A的秩为r,将矩阵U和V的列向量可以作为不同空间的标准正交基,如下:

  • 矩阵U的前r个列向量可以作为A列空间的标准正交基;
  • 矩阵U的后m-r个列向量可以作为A左零空间的标准正交基;
  • 矩阵V的前r个列向量可以作为A行空间的标准正交基;
  • 矩阵U的后n-r个列向量可以作为A零空间的标准正交基;

如下:

五. SVD分解的正交矩阵

已知A=U\Sigma V^T,两边同时乘以正交矩阵V,可得:

AV=U\Sigma

这个结果有一个很有意思的理解角度:从矩阵V中随机抽取一个列向量v_j,对应位置抽取对角阵的元素\sigma_j,以及矩阵U的列向量U_j,可得:

Av_j=u_j\sigma_j

六. 方阵与SVD分解

对方阵AA^T做SVD分解,如下:

AA^T=U\Sigma V^T(U\Sigma V^T)^T=U\Sigma\Sigma^TU^T

此时U即为AA^T的特征向量形成的矩阵,\Sigma\Sigma^TAA^T的特征值。

同理,对A^TA运算如下:

A^TA=(U\Sigma V^T)^TU\Sigma V^T=V\Sigma^T\Sigma V^T

此时V即为A^TA的特征向量形成的矩阵,\Sigma^T\SigmaA^TA的特征值。令r代表矩阵A的秩:

\Sigma\Sigma^T为m行m列的矩阵,主对角线的元素为\sigma_1^2,\cdots,\sigma_r^2

\Sigma^T\Sigma为n行n列的矩阵,主对角线的元素为\sigma_1^2,\cdots,\sigma_r^2

可以观察到\Sigma^T\Sigma\Sigma\Sigma^T都为方阵,维度是不一样的,但是它们两个主对角线元素是一模一样的。

七. 单位特征向量与SVD分解

根据“六”中的讨论,A^TA的特征值为\sigma_1^2,\cdots,\sigma_r^2,特征向量为v_j,由此可得:

A^TA v_j=\sigma_j^2 v_j

两边同时乘以矩阵A可得:

AA^TA v_j=\sigma_j^2 Av_j

AA^T看成一个矩阵,A v_j看成特征向量,\sigma_j^2看成特征值。也就是说,A v_j是矩阵AA^T的特征向量。易得:

||Av_j||^2=\sigma_j^2

所以可得向量A v_j的长度为\sigma_j,那么可得单位向量为:

\frac{A v_j}{\sigma_j}

综合可得:

\frac{A v_j}{\sigma_j}=u_j

以上过程的本质就是AV=U\Sigma

八. 例题分析:秩为1

对以下矩阵A进行SVD分解,并分析相关性质:

A=\begin{bmatrix} -1\\ 2\\ 2 \end{bmatrix}

解:

该矩阵仅有一列,所以秩r=1,这也就意味着该矩阵进行SVD分解,中间的对角阵\Sigma仅有一个非零元素,如下:

对角阵\Sigma主对角线仅有一个元素\sigma_1=3

易得A^TA为1行1列的矩阵,AA^T为3行3列的矩阵,这两个矩阵都拥有特征值9,开根号后刚好为3,与以上讨论一致。

九. 例题分析:秩为2

对以下矩阵A进行SVD分解,并分析相关性质:

A=\begin{bmatrix} -1 & 1 &0 \\ 0&-1 & 1 \end{bmatrix}

解:

显然,矩阵A的秩为2,易运算AA^T如下:

AA^T=\begin{bmatrix} 2 & -1\\ -1 & 2 \end{bmatrix}

可以分析出该方阵的特征值为3和1.

对原始矩阵A进行SVD分解如下:

可以发现该矩阵的奇异值为\sqrt 3\sqrt 1

矩阵U的每一列可以看成A的左奇异向量,也可以看成AA^T的单位特征向量;

矩阵V的每一列可以看成A的右奇异向量,也可以看成A^TA的单位特征向量;

十. 计算机网络与矩阵的秩

我们都知道矩阵的秩代表的是线性独立的行向量或列向量的个数。但在实际的计算中这个量不是很好分析。

在物理层安全,或无线通信中,会存在噪声,这些噪声通常很小,进而延伸出矩阵有效的秩概念。

假定\epsilon是一个很小很小的数,可以将其看成所谓的误差(roundoff error)

(1)

\begin{bmatrix} \epsilon &2\epsilon \\ 1 & 2 \end{bmatrix}

很明显这个矩阵的秩为1

(2)

\begin{bmatrix} \epsilon &1 \\ 0& 0 \end{bmatrix}

这个矩阵的秩也很好分析,为1

接下来我们来看第三个有趣的例子:

\begin{bmatrix} \epsilon &1 \\ \epsilon &1+\epsilon \end{bmatrix}

乍一看这个矩阵的秩为2,但实际情况真的如此吗?

我们知道A^TAAA^T均为对称的方阵,并且这两个矩阵的秩与A相同

对这两个矩阵而言,特征值开根号即为奇异值,根据这个角度不难分析刚才的矩阵A有效的秩为1(不要忘记\epsilon为一个很小的数)。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

品优购实战案例

1. 开发工具 VScode 、Photoshop(fw)、主流浏览器(以Chrome浏览器为主) 2. 技术栈  利用 HTML5 CSS3 手动布局,可以大量使用 H5 新增标签和样式  采取结构与样式相分离,模块化开发  良好的代码规范有…

微信支付产品种类

前言 微信支付产品共有6种形式,详情可参考 支付产品 支付产品 1. 付款码支付 用户展示微信钱包内的 “付款码”给商家,商家扫描后直接完成支付,适用于线下面对面收银场景。 2. JSAPI 支付 JSAPI 支付是指商户通过调用微信支付提供的接…

PostgreSQL表全解

文章目录 一、 约束1、 主键2、 非空3、唯一4、检查5、外键6、默认值 二、触发器1、构建表信息,填充数据2、触发器函数3、触发器 三、 表空间四、 视图五、索引1、 索引的基本概念2、索引的分类3、创建索引 六、 物化视图 一、 约束 1、 主键 primary key -- 主键…

25道RabbitMQ面试题含答案(很全)

1. 什么是RabbitMQ RabbitMQ是一个开源的消息队列系统,它使用AMQP(高级消息队列协议)标准。RabbitMQ的主要目标是提供可靠的消息传递,确保消息的可靠性和顺序性,同时提供灵活的路由和消息确认机制。 RabbitMQ基于AMQ…

Nginx(十三) 配置文件详解 - 反向代理(超详细)

本篇文章主要讲ngx_http_proxy_module和ngx_stream_proxy_module模块下各指令的使用方法。 1. 代理请求 proxy_pass 1.1 proxy_pass 代理请求 Syntax: proxy_pass URL; Default: — Context: location, if in location, limit_except 设置代理服务器的协议和地址以…

linux挂载未分配的磁盘空间

目录 1.先查看是否有未分配的磁盘空间 2.分区 3.格式化新分区(这里以ext4为例) 4.创建一个目录用于挂载 5.将新分区挂载到目录 6.查看新的磁盘分区情况 7.配置系统在启动时自动挂载 1.先查看是否有未分配的磁盘空间 lsblk 可以看到/dev/vdb 是…

利用 PEB_LDR_DATA 结构枚举进程模块信息

1. 引言 我们常常通过很多方法来获取进程的模块信息,例如 EnumProcessModules 函数、CreateToolhelp32Snapshot 函数、WTSEnumerateProcesses 函数、ZwQuerySystemInformation 函数等。但是调用这些接口进行模块枚举的原理是什么我们并不知道。通过学习 PEB 中 PEB…

【Linux】进程控制深度了解

> 作者简介:დ旧言~,目前大二,现在学习Java,c,c,Python等 > 座右铭:松树千年终是朽,槿花一日自为荣。 > 目标:熟练掌握Linux下的进程控制 > 毒鸡汤&#xff…

Vue 新一代开发者工具正式开源!

近日,Vue 新一代开发者工具(DevTools)正式开源!Vue DevTools 是一个旨在增强 Vue 开发人员体验的工具,它提供了一些功能来帮助开发者更好地了解 Vue 应用。下面就来看看新一代 Vue DevTools 的功能和使用方法 功能 首…

2024.1.2 Spark 简介,架构,环境部署,词频统计

目录 一. Spark简介 二 . Spark 框架模块 三. 环境准备 3.1 Spark Local模式搭建 3.2 通过Anaconda安装python3环境 3.3 PySpark库安装 四 . Spark集群模式架构介绍 五. pycharm远程开发环境 六. Spark词频统计 一. Spark简介 1. Spark 和MapReduce MR:大量的磁盘反复…

vmware安装龙蜥操作系统

vmware安装龙蜥操作系统 1、下载龙蜥操作系统 8.8 镜像文件2、安装龙蜥操作系统 8.83、配置龙蜥操作系统 8.83.1、配置静态IP地址 和 dns3.2、查看磁盘分区3.3、查看系统版本 1、下载龙蜥操作系统 8.8 镜像文件 这里选择 2023年2月发布的 8.8 版本 官方下载链接 https://mirro…

使用拉普拉斯算子的图像锐化的python代码实现——数字图像处理

原理 拉普拉斯算子是一个二阶导数算子,用于图像处理中的边缘检测。它通过计算图像亮度的二阶空间导数来工作,能够突出显示图像中的快速变化区域,如边缘。 图像锐化的原理: 图像锐化是指增强图像中的边缘和细节,使图像…

VMware 虚拟机 ubuntu 20.04 硬盘扩容方法

前言 最近由于需要编译 【RK3568】的 Linux SDK,发现 虚拟机默认的 200G 空间不足了,因此想增加这个 200G 空间的限制,通过网络上查找了一些方法,加上自己亲自验证,确认 硬盘扩容 正常,方法也比较的容易&a…

微服务-OpenFeign-工程案例

Ribbon 前置知识 是NetFlix的开源项目,主要来提供关于客户端的负载均衡能力。从多个服务提供方,选取一个节点发起调用。 Feign:NetFlix,SpringCloud 的第一代LB(负载均衡)客户端工具包。 OpenFeign:SpringCloud自研&#xff0c…

计算机基础面试题 |03.精选计算机基础面试题

🤍 前端开发工程师(主业)、技术博主(副业)、已过CET6 🍨 阿珊和她的猫_CSDN个人主页 🕠 牛客高级专题作者、在牛客打造高质量专栏《前端面试必备》 🍚 蓝桥云课签约作者、已在蓝桥云…

c语言内嵌汇编知识点记录

内容在飞书云文档,点击打开即可。 Docshttps://r0dhfl3ujy9.feishu.cn/docx/EaVIdjGVeoS6fUxiKWkcjAq8nWg?fromfrom_copylink

使用定时器setInterval,在Moment.js 时间格式化插件基础上完成当前时间持续动态变化

1、引入插件 npm install moment --save 2、js配置&#xff1a;当前需要使用的文件中直接引入 import moment from moment; 3、代码实现&#xff1a;定义一个变量进行回显 3.1、dom部分 <span> {{ timeData }} </span> 3.2、js代码 <script> import mo…

C++初阶------------------入门C++

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; ​&#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382; &#x1f389;&#x1f389;&#x1f389…

单片机开发--keil5

一.keil5 Keil uVision5是一个集成开发环境&#xff08;IDE&#xff09;&#xff0c;用于对嵌入式系统中的微控制器进行编程。它是一个软件套件&#xff0c;包括源代码编辑器、项目经理、调试器以及微控制器开发、调试和编程所需的其他工具。Keil uVision5 IDE主要用于对基于A…

python调用openai api报错self._sslobj.do_handshake()OSError: [Errno 0] Error

python调用openai api报错self._sslobj.do_handshake()OSError: [Errno 0] Error 废话不说&#xff0c;先上代码&#xff0c;根据官网的介绍写的,chatgpt3.5 api简单调用 import os from openai import OpenAI from dotenv import load_dotenv# 加载 .env 文件中的变量 load_…