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

矩阵分解和线性方程组求解算法介绍

svd(奇异值分解)

分解结果:

对于方阵A=PSQ^T,其中P为AA^T的特征向量,P它是一个正交阵,Q为A^TA的特征向量,Q也是一个正交阵,S主对角的平方为AA^T的特征值并且它们是从大到小排列的均大于等于零,S是一个对角阵。

对于非方阵A_{mn}=PS_{mn}Q^T=P\begin{pmatrix} \sum &0\\ 0 & 0 \end{pmatrix}Q^T,其中\sum为对角阵,P和Q都是正交阵

优点:1、能够对任意矩阵分解,适用范围广。

2、数值稳定性好,在处理病态矩阵时能提供可靠结果。

缺点:1、依赖于特征值的计算,所以计算复杂度较高。

2、对于P和Q有时分解不唯一,比如如果有零奇异值,那么分解不唯一。

QR分解

介绍:QR分解有2种方法,一种是基于古文斯方法,另一种是基于豪斯霍尔德方法,豪斯霍尔德方法计算量约是吉文斯方法的一半,这是它的优势,但对于稀疏矩阵吉文斯仍有不便之处。

分解结果:

A可逆,则A=QR,其中Q是正交阵,R是主对角线全为正的上三角阵。

A非方阵,则A_{ns}=Q_{ns}R_{ns},其中n>s,Q_{ns}为正交阵,R_{ns}=\binom{\overset{\textasciicircum }{R_ss}}{0},其中\overset{\textasciicircum }{R_ss}为主对角线上全为正的上三角阵。

优点:1、如果分解的矩阵可逆,那么分解唯一。

2、使用豪斯霍尔德方法时,数值稳定性较好,误差传播较小。

缺点:1、不能够对任意矩阵分解,比如行数小于列数时就不能分解了。

注意:QR分解不是lsqr算法,lsqr算法并没有使用QR分解,不过有类似QR分解的结构。QR分解是将矩阵分解为正交矩阵和上三角矩阵乘积的一种矩阵分解方法,主要用于求解线性方程组、计算矩阵的特征值等。而LSQR是一种用于求解线性方程组或最小二乘问题的迭代算法。下面介绍一下lsqr算法。

lsqr算法(它并不属于矩阵分解,但是为了区别于QR分解这里就简单介绍了)

介绍:主要用来求最小二乘解。

优点:1、适用于大规模问题。尤其是矩阵为稀疏矩阵时,lsqr算法能有效减少计算量和储存空间。

2、无需矩阵求逆,lsqr巧妙的避开了矩阵求逆,避免了矩阵求逆过程中可能出现的数值不稳定问题以及高昂的计算成本,特别是大型矩阵求逆计算量和难度都非常大。

3、在sklearn源码注释中说它是在{'auto', 'svd ', 'cholesky', 'lsqr', 'sparse_cg', 'sag', 'saga'}中求解岭回归模型速度是最快的。

缺点:1、依赖初始值。

2、解的精度取决于迭代次数和收敛条件。

cholesky分解

介绍:cholesky分解主要用于求解对称正定线性方程组。

分解结果:对称正定阵A=LL^T,L是对角元素均为正的下三角矩阵,。

优点:1、分解是唯一的。

缺点:1、要求分解矩阵是对称正定的。

sparse_cg算法(用于求解稀疏线性方程组的共轭梯度法的变体)

优点:1、计算效率高。充分利用了矩阵的稀疏性,避免了大量不必要的运算。

2、比“cholesky”更适合大规模数据。

缺点:1、要求矩阵必须是对称正定的。

sag算法(随机平均梯度下降算法)后续待更新

优点:1、适用于处理大规模数据。

2、在岭回归模型中的求解器{'auto', 'svd ', 'cholesky', 'lsqr', 'sparse_cg', 'sag', 'saga'}中,求解速度算是比较快的了。

缺点:1、对非凸问题效果有限。

saga算法(sag算法的变体)后续待更新

介绍:每次迭代时,不仅利用当前样本的梯度,还结合了之前所有样本梯度的信息来更新模型参数。

优点:1、相比于sag算法,对于非凸问题它能有效的避免陷入局部最优解。

2、适用于处理大规模数据。

3、在岭回归模型中的求解器{'auto', 'svd ', 'cholesky', 'lsqr', 'sparse_cg', 'sag', 'saga'}中,求解速度算是比较快的了

缺点:相比于sag算法,对超参数敏感性较高。


http://www.kler.cn/a/591536.html

相关文章:

  • 游戏引擎 Unity - Unity 顶部菜单栏(文件、编辑、资源、游戏对象、组件、服务、窗口、帮助)
  • 如何通过Python实现自动化任务:从入门到实践
  • ubuntu24.04安装VMware Tools
  • hadoop集群配置-rsync命令同步文件夹
  • 分享一个项目中遇到的一个算法题
  • SSH反向隧道
  • flutter 专题 七十七 Flutter 数字增加动画
  • MySQL 8主从复制配置最佳实践
  • 2025蓝桥杯JAVA编程题练习Day6
  • Linux的root用户 、用户组
  • Cursor与Blender-MCP生成3D模型
  • YunSDR AIR:从架构革新到智能融合的演进之路
  • 前端面试:如何标准化处理线上用户反馈的问题?
  • 07-SDRAM控制器的设计——Sdram_Control.v代码解析
  • vs2017版本与arcgis10.1的ArcObject SDK for .NET兼容配置终结解决方案
  • Linux上离线安装PyTorch教程:No module named ‘_bz2:No module named ‘_lzma‘
  • 全波电磁仿真——超导量子芯片研发的“加速器”
  • 5.3《凸透镜成像的规律》——先于5.2《生活中的透镜》讲
  • 【入门初级篇】布局类组件的使用(1)
  • 【redis】Jedis 操作 Redis 基础指令(上)