news 2026/4/23 13:10:52

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

作者头像

张小明

前端开发工程师

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/4/23 13:16:21

ABAQUS混凝土细观3D模型-含界面过渡区的多面体骨料密堆积

混凝土细观结构对其宏观力学性能具有决定性影响。界面过渡区(ITZ)作为骨料与水泥基体间的薄弱相,显著影响混凝土的力学行为与耐久性。在ABAQUS中构建含界面过渡区的多面体骨料密堆积3D模型,能够真实反映混凝土细观非均质特性&…

作者头像 李华
网站建设 2026/4/23 13:11:57

旅行记录应用全文搜索 - Cordova OpenHarmony 混合开发实战

欢迎大家加入开源鸿蒙跨平台开发者社区,一起共建开源鸿蒙跨平台生态。 📌 概述 全文搜索功能允许用户通过关键词快速查找旅行记录。搜索功能支持在旅行的多个字段中进行搜索,如目的地、描述、标签等。全文搜索提供了快速访问特定旅行的便利。…

作者头像 李华
网站建设 2026/4/23 11:20:38

Qwen3-VL-8B本地部署与多模态应用实战

Qwen3-VL-8B本地部署与多模态应用实战 你有没有遇到过这样的场景?客服系统收到一张用户上传的产品故障图,却只能回复“请描述问题”;电商平台每天涌入成千上万张商品截图,却要靠人工逐个核对信息;内容审核平台面对图文…

作者头像 李华
网站建设 2026/4/23 13:01:21

Qwen3-VL-30B部署指南:GPU配置与推理优化

Qwen3-VL-30B部署实战:从硬件选型到高并发服务落地 在医院的放射科,一位医生上传了三张不同时间点的脑部MRI影像,系统几秒后返回:“左侧海马区占位性病变体积由1.1cm增长至1.8cm(63.6%),增强扫…

作者头像 李华
网站建设 2026/4/23 13:01:34

MySQL的索引底层数据结构?(B+树)为什么用B+树不用B树或哈希?

1. MySQL索引的底层数据结构:B树核心答案:MySQL的InnoDB存储引擎默认的索引数据结构是B树。什么是B树?B树是B树的一种变体,它专为磁盘或其他直接存取的辅助存储设备而设计。它是一种平衡的多路搜索树。B树的关键特性(与…

作者头像 李华
网站建设 2026/4/23 12:36:15

LobeChat能否对接Monday.com?可视化工作流智能管理

LobeChat 与 Monday.com 的融合:构建可视化工作流的智能交互入口 在现代企业中,项目管理工具早已不再是简单的“待办清单”。像 Monday.com 这样的平台,凭借其高度可视化的看板、灵活的自定义字段和强大的自动化能力,已成为团队协…

作者头像 李华