news 2026/6/10 2:18:59

人工智能之数学基础 线性代数:第四章 矩阵分解

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
人工智能之数学基础 线性代数:第四章 矩阵分解

人工智能之数学基础 线性代数

第四章 矩阵分解


文章目录

  • 人工智能之数学基础 线性代数
  • 前言
  • 一、为什么需要矩阵分解?
  • 二、1. 奇异值分解(Singular Value Decomposition, SVD)
    • ✅ 定义
    • 🌐 几何意义
    • 🔧 应用场景
    • 💻 Python 实现
    • 🖼️ 应用:图像压缩(SVD 截断)
  • 三、2. LU 分解(LU Decomposition)
    • ✅ 定义
    • 🔧 应用场景
    • 💻 Python 实现(使用 SciPy)
  • 四、3. QR 分解(QR Decomposition)
    • ✅ 定义
    • 🔧 应用场景
    • 💻 Python 实现
  • 五、4. 特征分解(Eigendecomposition)
    • ✅ 定义
    • 💻 Python 实现
  • 六、分解方法对比总结
  • 七、进阶:使用分解求伪逆(Moore-Penrose 逆)
  • 八、结语
  • 后续
  • 资料关注

前言

矩阵分解(Matrix Factorization)是将一个矩阵表示为若干个结构更简单或具有特定性质的矩阵乘积的过程。它是数值线性代数、机器学习、信号处理、优化等领域的核心工具。本文将系统介绍奇异值分解(SVD)LU 分解QR 分解特征分解(Eigendecomposition),并提供完整的Python(NumPy/SciPy)代码实现


一、为什么需要矩阵分解?

  • 简化计算:如求解线性方程组A x = b Ax = bAx=b
  • 揭示结构:如 SVD 揭示数据的主方向
  • 降维与压缩:如 PCA 基于 SVD
  • 数值稳定性:避免直接求逆
  • 算法加速:利用稀疏性或正交性

二、1. 奇异值分解(Singular Value Decomposition, SVD)

✅ 定义

对任意矩阵 $ A \in \mathbb{R}^{m \times n} $(不要求方阵),存在分解:

A = U Σ V T A = U \Sigma V^TA=UΣVT

其中:

  • $U \in \mathbb{R}^{m \times m}: ∗ ∗ 左奇异向量矩阵 ∗ ∗ ,列向量正交 :**左奇异向量矩阵**,列向量正交左奇异向量矩阵,列向量正交(U^T U = I$)
  • $ V \in \mathbb{R}^{n \times n}: ∗ ∗ 右奇异向量矩阵 ∗ ∗ ,列向量正交 :**右奇异向量矩阵**,列向量正交右奇异向量矩阵,列向量正交(V^T V = I$)
  • $\Sigma \in \mathbb{R}^{m \times n} $:奇异值矩阵,对角线上为非负实数σ 1 ≥ σ 2 ≥ ⋯ ≥ σ r > 0 \sigma_1 \geq \sigma_2 \geq \cdots \geq \sigma_r > 0σ1σ2σr>0( r = rank ( A ) (r = \text{rank}(A)(r=rank(A)),其余为 0

奇异值σ i = λ i \sigma_i = \sqrt{\lambda_i}σi=λi,其中λ i \lambda_iλiA T A A^T AATAA A T AA^TAAT的特征值。

🌐 几何意义

SVD 将任意线性变换分解为三步:

  1. 旋转/反射V T V^TVT
  2. 沿坐标轴缩放Σ \SigmaΣ
  3. 再次旋转/反射U UU

🔧 应用场景

  • 主成分分析(PCA)
  • 图像压缩
  • 推荐系统(如 Netflix 算法)
  • 伪逆计算(最小二乘解)
  • 降噪

💻 Python 实现

importnumpyasnpimportmatplotlib.pyplotasplt# 示例矩阵(非方阵)A=np.array([[3,1,1],[-1,3,1]],dtype=float)# 完整 SVDU,s,VT=np.linalg.svd(A)Sigma=np.zeros_like(A,dtype=float)np.fill_diagonal(Sigma,s)print("A =\n",A)print("\nU =\n",U)print("\n奇异值 s =",s)print("\nΣ =\n",Sigma)print("\nV^T =\n",VT)# 验证 A ≈ U @ Σ @ V^TA_reconstructed=U @ Sigma @ VTprint("\n重建误差 ||A - UΣV^T||_F =",np.linalg.norm(A-A_reconstructed,'fro'))# 经济型 SVD(更高效)U_econ,s_econ,VT_econ=np.linalg.svd(A,full_matrices=False)print("\n经济型 SVD 形状:",U_econ.shape,s_econ.shape,VT_econ.shape)

🖼️ 应用:图像压缩(SVD 截断)

fromPILimportImage# 读取灰度图像img=Image.open('lena.png').convert('L')# 替换为你的图片路径A=np.array(img,dtype=float)# SVDU,s,VT=np.linalg.svd(A)# 保留前 k 个奇异值k=50A_k=U[:,:k]@ np.diag(s[:k])@ VT[:k,:]# 显示plt.figure(figsize=(12,4))plt.subplot(1,3,1);plt.imshow(A,cmap='gray');plt.title('原始图像')plt.subplot(1,3,2);plt.imshow(A_k,cmap='gray');plt.title(f'k={k}的近似')plt.subplot(1,3,3);plt.plot(s);plt.title('奇异值衰减');plt.xlabel('索引');plt.ylabel('σ')plt.tight_layout()plt.show()print(f"压缩率: 原始{A.size}元素 → 存储{k*(A.shape[0]+A.shape[1]+1)}元素")

三、2. LU 分解(LU Decomposition)

✅ 定义

方阵$ A \in \mathbb{R}^{n \times n} $,若其所有顺序主子式非零,则可分解为:

A = L U A = L UA=LU

其中:

  • $ L $:下三角矩阵(Lower triangular),对角线通常为 1(Doolittle 分解)

  • $ U $:上三角矩阵(Upper triangular)

实际中常使用带行交换的 LU 分解(PA = LU),其中P PP是置换矩阵,提高数值稳定性。

🔧 应用场景

  • 高效求解多个右端项的线性方程组A x = b 1 , b 2 , … Ax = b_1, b_2, \dotsAx=b1,b2,
  • 计算行列式:det ⁡ ( A ) = ∏ i U i i \det(A) = \prod_i U_{ii}det(A)=iUii
  • 求矩阵逆

💻 Python 实现(使用 SciPy)

importnumpyasnpfromscipy.linalgimportlu A=np.array([[2,1,1],[4,3,3],[8,7,9]],dtype=float)# PA = LUP,L,U=lu(A)print("A =\n",A)print("\nP =\n",P)print("\nL =\n",L)print("\nU =\n",U)print("\n验证 PA = LU:\n",np.allclose(P @ A,L @ U))# 求解 Ax = bb=np.array([1,2,3],dtype=float)# 步骤:PAx = Pb → LUx = Pb# 先解 Ly = Pb(前向代入),再解 Ux = y(后向代入)fromscipy.linalgimportsolve_triangular Pb=P @ b y=solve_triangular(L,Pb,lower=True)x=solve_triangular(U,y,lower=False)print("\n解 x =",x)print("验证 Ax = b:",np.allclose(A @ x,b))

四、3. QR 分解(QR Decomposition)

✅ 定义

对任意矩阵 $ A \in \mathbb{R}^{m \times n} $( m ≥ n (m \geq n(mn),存在分解:

A = Q R A = Q RA=QR

其中:

  • $Q \in \mathbb{R}^{m \times m}: ∗ ∗ 正交矩阵 ∗ ∗ ( :**正交矩阵**(正交矩阵Q^T Q = I$)
  • $R \in \mathbb{R}^{m \times n} $:上三角矩阵

经济型 QR:$Q \in \mathbb{R}^{m \times n}, R \in \mathbb{R}^{n \times n} $

🔧 应用场景

  • 求解最小二乘问题
  • 特征值计算(QR 算法)
  • Gram-Schmidt 正交化的稳定实现

💻 Python 实现

importnumpyasnpfromscipy.linalgimportqr A=np.array([[1,1],[1,0],[0,1]],dtype=float)# 完整 QRQ_full,R_full=qr(A,mode='full')# 经济型 QRQ,R=qr(A,mode='economic')print("A =\n",A)print("\nQ (经济型) =\n",Q)print("\nR =\n",R)print("\n验证 A = QR:",np.allclose(A,Q @ R))print("Q 正交性 Q^T Q = I:\n",np.round(Q.T @ Q,10))# 用 QR 解最小二乘:min ||Ax - b||b=np.array([2,1,3],dtype=float)# Ax = b → QRx = b → Rx = Q^T bx=solve_triangular(R,Q.T @ b)print("\n最小二乘解 x =",x)print("残差范数:",np.linalg.norm(A @ x-b))

五、4. 特征分解(Eigendecomposition)

✅ 定义

可对角化方阵$ A \in \mathbb{R}^{n \times n} $,若存在n nn个线性无关特征向量,则:

A = Q Λ Q − 1 A = Q \Lambda Q^{-1}A=QΛQ1

其中:

  • $Q $:特征向量矩阵(每列为一个特征向量)
  • $ \Lambda $:对角矩阵,对角元为特征值

A AA实对称矩阵,则Q QQ可选为正交矩阵,即A = Q Λ Q T A = Q \Lambda Q^TA=QΛQT

💻 Python 实现

importnumpyasnp# 对称矩阵(保证可正交对角化)A=np.array([[4,2],[2,3]],dtype=float)# 使用 eigh(对称矩阵专用)eigvals,Q=np.linalg.eigh(A)Lambda=np.diag(eigvals)print("A =\n",A)print("\nΛ =\n",Lambda)print("\nQ =\n",Q)print("\n验证 A = Q Λ Q^T:",np.allclose(A,Q @ Lambda @ Q.T))

六、分解方法对比总结

分解类型适用矩阵形式关键性质主要用途
SVD任意m × n m \times nm×nA = U Σ V T A = U \Sigma V^TA=UΣVTU , V U, VU,V正交,Σ \SigmaΣ对角非负降维、压缩、伪逆、PCA
LU方阵(通常非奇异)P A = L U PA = LUPA=LUL LL下三角,U UU上三角解线性方程组、行列式
QR任意m × n m \times nm×nm ≥ n m \ge nmnA = Q R A = QRA=QRQ QQ正交,R RR上三角最小二乘、特征值算法
特征分解可对角化方阵A = Q Λ Q − 1 A = Q \Lambda Q^{-1}A=QΛQ1Λ \LambdaΛ对角动力系统、PCA(协方差矩阵)

七、进阶:使用分解求伪逆(Moore-Penrose 逆)

对于任意矩阵A AA,其伪逆为:

A + = V Σ + U T A^+ = V \Sigma^+ U^TA+=VΣ+UT

其中Σ + \Sigma^+Σ+是将Σ \SigmaΣ中非零奇异值取倒数并转置。

# 用 SVD 计算伪逆U,s,VT=np.linalg.svd(A,full_matrices=False)# 构造 Σ⁺s_inv=np.array([1/siifsi>1e-10else0forsiins])A_pinv=VT.T @ np.diag(s_inv)@ U.T# 对比 NumPy 内置函数A_pinv_np=np.linalg.pinv(A)print("伪逆一致?",np.allclose(A_pinv,A_pinv_np))

八、结语

矩阵分解是连接理论与应用的桥梁:

  • SVD是最通用、最强大的工具,适用于任何矩阵;
  • LU/QR是数值线性代数的基石,用于高效求解方程;
  • 特征分解揭示了方阵的内在动力学。

后续

python过渡项目部分代码已经上传至gitee,后续会逐步更新。

资料关注

公众号:咚咚王
gitee:https://gitee.com/wy18585051844/ai_learning

《Python编程:从入门到实践》
《利用Python进行数据分析》
《算法导论中文第三版》
《概率论与数理统计(第四版) (盛骤) 》
《程序员的数学》
《线性代数应该这样学第3版》
《微积分和数学分析引论》
《(西瓜书)周志华-机器学习》
《TensorFlow机器学习实战指南》
《Sklearn与TensorFlow机器学习实用指南》
《模式识别(第四版)》
《深度学习 deep learning》伊恩·古德费洛著 花书
《Python深度学习第二版(中文版)【纯文本】 (登封大数据 (Francois Choliet)) (Z-Library)》
《深入浅出神经网络与深度学习+(迈克尔·尼尔森(Michael+Nielsen)》
《自然语言处理综论 第2版》
《Natural-Language-Processing-with-PyTorch》
《计算机视觉-算法与应用(中文版)》
《Learning OpenCV 4》
《AIGC:智能创作时代》杜雨+&+张孜铭
《AIGC原理与实践:零基础学大语言模型、扩散模型和多模态模型》
《从零构建大语言模型(中文版)》
《实战AI大模型》
《AI 3.0》

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/9 20:08:53

LangGraph工作流转换为LangFlow可视化实践

LangGraph工作流转换为LangFlow可视化实践 在构建AI驱动的应用时,我们常常面临一个两难:一方面希望借助代码实现灵活、可追踪的复杂逻辑(如使用LangGraph定义状态机),另一方面又渴望通过拖拽式界面快速验证想法、降低…

作者头像 李华
网站建设 2026/6/9 14:50:06

TCP/UDP协议

目录 TCP协议 特点 适用场景 缺点 UDP协议 特点 适用场景 缺点 对比总结 TCP连接 TCP建立连接的过程称为三次握手 ​​ TCP断开连接的四次挥手​编辑 常用的TCP端口号及其功能 TCP协议 TCP(Transmission Control Protocol)是一种面向…

作者头像 李华
网站建设 2026/6/8 6:40:35

Qwen3-VL-30B-FP8:高性能多模态模型量化新突破

Qwen3-VL-30B-FP8:高性能多模态模型量化新突破 在AI系统向真实世界任务深度渗透的今天,如何让庞大的视觉语言模型(VLM)走出实验室、真正落地于高并发、低延迟的生产环境,成为开发者面临的核心挑战。参数动辄百亿级的多…

作者头像 李华
网站建设 2026/6/6 8:27:45

Linly-Talker:打造多模态AI数字人完整指南

Linly-Talker:打造多模态AI数字人完整指南 在短视频爆发、虚拟交互崛起的今天,一个现实摆在面前:内容创作者越来越需要“出镜”,但并非人人都愿意或擅长面对镜头。与此同时,企业对自动化服务的需求也从文字客服升级到…

作者头像 李华
网站建设 2026/6/10 1:19:29

LobeChat能否应用于自动驾驶?车载语音助手升级

LobeChat能否应用于自动驾驶?车载语音助手升级 在智能汽车的演进浪潮中,一个看似简单却极为关键的问题正在浮现:为什么我们和车说话,它还是听不懂“人话”? 尽管今天的车辆已经能自动变道、识别红绿灯,但当…

作者头像 李华
网站建设 2026/6/9 14:18:20

Windows10下WSL安装vLLM 0.11.0避坑指南

Windows10下WSL安装vLLM 0.11.0避坑指南 在当前大模型快速落地的背景下,本地部署一个高性能、低延迟的推理服务已成为许多开发团队的刚需。尤其是像 vLLM 这类支持 PagedAttention 和连续批处理的引擎,凭借其高吞吐、低显存占用的优势,正被广…

作者头像 李华