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

机器学习中的线性代数:奇异值分解 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 项的时候,就基本能够近似表示原本的图片,这也就是所谓“低秩近似”,也就起到了压缩图片的作用

相关文章:

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

线性代数 奇异值分解&#xff08;SVD&#xff09; 参考资料&#xff1a; 超详细&#xff01;彻底搞懂矩阵奇异值分解&#xff08;SVD&#xff09;本质计算应用&#xff01;_哔哩哔哩_bilibili 非常好的视频&#xff0c;本文内容主要来自于该视频&#xff0c;在此表示感谢&#…...

【每日八股】计算机网络篇(三):IP

目录 DNS 查询服务器的基本流程DNS 采用 TCP 还是 UDP&#xff0c;为什么&#xff1f;默认使用 UDP 的原因需要使用 TCP 的场景&#xff1f;总结 DNS 劫持是什么&#xff1f;解决办法&#xff1f;浏览器输入一个 URL 到显示器显示的过程&#xff1f;URL 解析TCP 连接HTTP 请求页…...

6. PromQL的metric name(在node exporter复制下来交给AI解释的)

目录 前言&#xff1a; Go 运行时指标&#xff1a; Go 内存统计指标&#xff1a; CPU 指标&#xff1a; 内存指标&#xff1a; 磁盘指标&#xff1a; 网络指标&#xff1a; 系统指标&#xff1a; 前言&#xff1a; 写这个得目的是为了后续方便查询&#xff0c;因为在pro…...

基于单片机的速度里程表设计(论文+源码)

1 系统方案 本次智能速度里程表的总体架构如图2-1所示&#xff0c;在硬件上包括了STC89C52单片机&#xff0c;电机&#xff0c;显示模块&#xff0c;报警模块&#xff0c;DS1302时钟模块&#xff0c;超速检测模块&#xff0c;按键等等。在软件设计功能的功能上&#xff0c;按下…...

计算机毕业设计Python+Django+Vue3微博数据舆情分析平台 微博用户画像系统 微博舆情可视化(源码+ 文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…...

nvidia驱动升级-ubuntu 1804

升级 1.从官网下载*.run驱动文件 2.卸载原始驱动 sudo /usr/bin/nvidia-uninstall sudo apt-get --purge remove nvidia-\* # 可能不需要加-\ sudo apt-get purge nvidia-\* # 可能不需要加-\ sudo apt-get purge libnvidia-\* # 可能不需要…...

如何使用SSH命令安全连接并转发端口到远程服务器

ssh -p 22546 rootconnect.westc.gpuhub.com d6IS/mQKq/iG ssh -CNgv -L 6006:127.0.0.1:6006 rootconnect.westc.gpuhub.com -p 22546 第一条命令&#xff1a;用于登录远程服务器&#xff0c;进行交互式操作。第二条命令&#xff1a;用于建立 SSH 隧道&#xff0c;进行端口转…...

2025年天梯赛第1场选拔赛

目录 A:徐老师的积木山峰 B:徐老师的最长上升子序列 C:徐老师的机器命令 D:徐老师的地下堡 E:徐老师的新鲜羊腿 F:徐老师的黄金矿工 G:徐老师的成绩统计 H:春节糖果 I:幸运函数 J:好坏钥匙 A:徐老师的积木山峰 徐老师有 n 块积木排成一排&#xff0c;从左往右数编号依次为 1∼…...

06实现相册小项目

一、涉及的知识点&#xff1a; 1、bmp的显示 2、双向循环链表实现图片的轮播 3、触摸屏的滑动算法实现图片的切换 4、目录操作用以检索bmp图片文件 5、项目的优化方向 &#xff08;1&#xff09;可以实现不同图片大小的显示 &#xff08;2&#xff09;图片轮播的时候可以…...

Dify+DeepSeek | Excel数据一键可视化(创建步骤案例)(echarts助手.yml)(文档表格转图表、根据表格绘制图表、Excel绘制图表)

Dify部署参考&#xff1a;Dify Rag部署并集成在线Deepseek教程&#xff08;Windows、部署Rag、安装Ragan安装、安装Dify安装、安装ollama安装&#xff09; DifyDeepSeek - Excel数据一键可视化&#xff08;创建步骤案例&#xff09;-DSL工程文件&#xff08;可直接导入&#x…...

RK3568平台(GPIO篇)Android平台集成libgpiod库

一.libgpiod 介绍 libgpiod 是一个用于与 Linux GPIO(通用输入输出)子系统交互的用户空间库。它提供了一组简单且高效的 API,允许开发者通过用户空间程序控制 GPIO 引脚,而无需编写内核模块或直接操作 /sys/class/gpio 接口。libgpiod 是 Linux 内核推荐的 GPIO 访问方式,…...

API和SDK

API&#xff08;Application Programming Interface&#xff09;和 SDK&#xff08;Software Development Kit&#xff09;是软件开发中密切相关的概念&#xff0c;但它们之间存在一些区别&#xff1a; 定义 API &#xff1a;是一组预先定义的函数、协议和规范&#xff0c;用…...

CR电路介绍

CR电路&#xff08;RC电路&#xff09;介绍 CR电路&#xff08;电阻-电容电路&#xff09;由电阻&#xff08;R&#xff09;和电容&#xff08;C&#xff09;组成&#xff0c;是电子系统中的基础模块&#xff0c;广泛用于信号处理、定时、滤波等场景。以下是其核心功能、实现方…...

安装与配置 STK-MATLAB 接口

STK版本为11.6 Matlab版本为R2018a STK 提供 Connect 和 Object Model (COM) 两种接口与 MATLAB 交互&#xff0c;推荐使用 COM接口进行二次开发。 确保安装了 STK&#xff0c;并且 MATLAB 可以访问 STK Object Model。 在 MATLAB 中运行&#xff1a; % 添加 STK COM 库&#…...

NUMA架构介绍

NUMA 架构详解 NUMA&#xff08;Non-Uniform Memory Access&#xff0c;非统一内存访问&#xff09; 是一种多处理器系统的内存设计架构&#xff0c;旨在解决多处理器系统中内存访问延迟不一致的问题。与传统的 UMA&#xff08;Uniform Memory Access&#xff0c;统一内存访问…...

计算机二级MS之PPT

声明&#xff1a;跟着大猫和小黑学习随便记下一些笔记供大家参考&#xff0c;二级考试之前将持续更新&#xff0c;希望大家二级都能轻轻松松过啦&#xff0c;过了二级的大神也可以在评论区留言给点建议&#xff0c;感谢大家&#xff01;&#xff01; 文章目录 考题难点1cm25px…...

python中采用opencv作常规的图片处理的方法~~~

在python中&#xff0c;我们经常会需要对图片做灰度/二值化/模糊等处理&#xff0c;这时候opencv就是我们的好帮手了&#xff0c;下面我来介绍一下相关用法: 首先&#xff0c;需要安装opencv-python库: 然后&#xff0c;在你的代码中引用: import cv2 最后就是代码了&#x…...

deepseek在pycharm 中的配置和简单应用

对于最常用的调试python脚本开发环境pycharm&#xff0c;如何接入deepseek是我们窥探ai代码编写的第一步&#xff0c;熟悉起来总没坏处。 1、官网安装pycharm社区版&#xff08;免费&#xff09;&#xff0c;如果需要安装专业版&#xff0c;需要另外找破解码。 2、安装Ollama…...

Redis数据结构,渐进式遍历,数据库管理

1.Redis的其他数据结构 前面我们主要讲述了Redis中比较常用的集中数据结构String&#xff0c;List&#xff0c;Hash&#xff0c;Set&#xff0c;Zset&#xff0c;但这并不代表Redis只用这几种数据结构还有如Streams&#xff0c;Geospatial&#xff0c;Hyperloglog&#xff0c;…...

【CSS 】Class Variance Authority CSS 类名管理工具库

1.背景、什么是 CVA&#xff1f; Class Variance Authority (CVA) 是一个用于管理 CSS 类名 的工具库&#xff0c;特别适合在 React 或 Vue 等前端框架中使用。它可以帮助你更轻松地处理组件的 样式变体&#xff08;Variants&#xff09;&#xff0c;比如按钮的不同状态&#…...

[Python入门学习记录(小甲鱼)]第5章 列表 元组 字符串

第5章 列表 元组 字符串 5.1 列表 一个类似数组的东西 5.1.1 创建列表 一个中括号[ ] 把数据包起来就是创建了 number [1,2,3,4,5] print(type(number)) #返回 list 类型 for each in number:print(each) #输出 1 2 3 4 5#列表里不要求都是一个数据类型 mix [213,"…...

《量子潮涌下,DataWorks中AI模型训练框架的变革征途》

在科技迅猛发展的当下&#xff0c;量子计算技术犹如一颗璀璨新星&#xff0c;正以惊人的速度改写着人类的计算格局。这一颠覆性的技术&#xff0c;为人工智能&#xff08;AI&#xff09;领域带来了前所未有的发展契机&#xff0c;尤其是在处理海量数据方面&#xff0c;展现出传…...

【够用就好006】如何从零开发游戏上架steam面向AI编程的godot独立游戏制作实录001流程

记录工作实践 这是全新的系列&#xff0c;一直有个游戏制作梦 感谢AI时代&#xff0c;让这一切变得可行 长欢迎共同见证&#xff0c;期更新&#xff0c;欢迎保持关注&#xff0c;待到游戏上架那一天&#xff0c;一起玩 面向AI编程的godot独立游戏制作流程实录001 本期是第…...

LNK2038 检测到“RuntimeLibrary”的不匹配项: 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”

vs2019中属性设置 报错&#xff1a; vs2019中属性设置为 报错&#xff1a; 设置为 报错&#xff1a; 设置为 报错&#xff1a; 原因&#xff1a;是由于ncnn和paddleLite的库同时使用会冲突。只能用其中之一。 后面部署降lite都换成了ncnn就可以了。 要么都用ncnn&a…...

docker-compose部署mongodb副本集集群

生成密钥文件 ​ openssl rand -base64 756 > mongodb.key chmod 400 mongodb.key # 权限必须为400‌:ml-citation{ref="4" data="citationList"} chown 999:999 mongodb.key # MongoDB容器用户ID为999‌:ml-citation{ref="4" data="…...

SpringBoot校园管理系统设计与实现

在现代校园管理中&#xff0c;一个高效、灵活的管理系统是不可或缺的。本文将详细介绍基于SpringBoot的校园管理系统的设计与实现&#xff0c;涵盖管理员、用户和院校管理员三大功能模块&#xff0c;以及系统的部署步骤和数据库配置。 管理员功能模块 管理员是系统的核心管理…...

[QT]开发全解析:从概念到实战

文章目录 Qt 框架入门与应用开发指南一、Qt 框架概述1.1 什么是 Qt1.2 Qt 的发展史1.3 Qt 支持的平台1.4 Qt 版本1.5 Qt 的优点1.6 Qt 的应用场景1.7 Qt 的成功案例 二、Qt 的开发工具概述Qt CreatorVisual StudioEclipse 三、认识 Qt Creator3.1 Qt Creator 概览3.2 使用 Qt C…...

【pyqt】(十二)文本框

控件-文本框 文本框主要有两类&#xff0c;为富文本框(QTextEdit)和纯文本框(QPlainTextEdit)&#xff0c;在学习新的控件的时候&#xff0c; 需要掌握的内容主要除了属性之外&#xff0c;其信号触发方法也非常重要。还可以利用Designer来辅助我们进行学习&#xff0c;尤其是利…...

汽车免拆诊断案例 | 2023款丰田雷凌汽油版车行驶中偶尔出现通信故障

故障现象  一辆2023款丰田雷凌汽油版车&#xff0c;搭载1.5 L发动机&#xff0c;累计行驶里程约为4700 km。车主反映&#xff0c;行驶中偶尔组合仪表上的发动机转速信号丢失&#xff0c;转向变重&#xff0c;且有“闯车”感&#xff0c;同时车辆故障警报蜂鸣器鸣响。 故障诊断…...

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

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