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

齐次线性方程组最小二乘解

非齐次线性方程组:常数项不全为0的线性方程组。

Au=b

最小二乘解:

u=(A^{T}A)^{-1}A^{T}b


齐次线性方程组:常数项全为0的线性方程组。

Au=0

当齐次线性方程组没有严格零解时,我们需要通过最小二乘法寻找近似解,即找到非零向量u,使得残差平方和\left \| Au \right \|^{2}最小。

直接最小化\left \| Au \right \|^{2}会导致零解,但零解无实际意义,因此需要添加归一化约束排除零解,最常用的约束是\left \| u \right \|^{2}=1,即u^{T}u=1。齐次线性方程组的解不是唯一的,可以按比例缩放,任何ku仍是解,\left \| u \right \|^{2}=1是标准化了解的比例。

此时最小化\left \| Au \right \|^{2}问题转化为带约束的最小二乘优化:

\left\{\begin{matrix} min_{u}\left \| Au \right \|^{2}\\ s.t. \, \, \, u^{T}u=1 \end{matrix}\right.

通过拉格朗日乘子法将有约束问题转为无约束问题,构造拉格朗日函数:

        L(u,\lambda )=\left \| Au \right \|^{2}-\lambda (u^{T}u-1)\\ =(Au)^{T}(Au)-\lambda (u^{T}u-1)\\ =u^{T}A^{T}Au--\lambda (u^{T}u-1)

求极值即对u求偏导为0(利用矩阵性质\frac{\partial x^{T}Ax}{\partial x}=(A^{T}+A)x):

        \frac{\partial L(u,\lambda )}{\partial u}=2A^{T}Au-2\lambda u=0\\ \\A^{T}Au=\lambda u

结合目标函数 \left \| Au \right \|^{2}=u^{T}A^{T}Au=\lambda u^{T}u=\lambda,最小化\left \| Au \right \|^{2}即最小化\lambda

所以齐次线性方程组Au=0的最小二乘解u是 A^{T}A的最小特征值对应的特征向量。

        

示例代码:     

x = np.linspace(0, 99, 100)
y = 2 * x + 6.5 + np.random.randn(100)
plt.close('all')
plt.figure()
plt.plot(x, y)B = np.column_stack([x, y, np.ones(100)])
eigenvalues, eigenvectors = np.linalg.eig(np.dot(B.T, B))
idx = np.argmin(eigenvalues)
u = eigenvectors[:, idx]
a = u[0]
b = u[1]
c = u[2]
print("k={}, b={}".format(-a / b, -c / b))
y_pred = -a / b * x + (-c / b)
plt.plot(x, y_pred)

    

        

http://www.xdnf.cn/news/18269.html

相关文章:

  • 从零开始学AI——13
  • Docker复杂安装--最详细的MySQL主从复制与Redis集群安装、主从复制、主从扩容主从缩容实战版
  • java线程池相关知识
  • XR(AR/VR/MR)芯片方案,Soc VS “MCU+协处理器”?
  • 【动态规划、dp】P4933 大师
  • pnpm : 无法加载文件 C:\Program Files\nodejs\pnpm.ps1,因为在此系统上禁止运行脚本。
  • C++之多态(从0到1的突破)
  • Python如何将两个列表转化为一个字典
  • 基于STM32的APP遥控视频水泵小车设计
  • Codeforces MIN = GCD
  • Python爬虫实战:研究dark-fantasy,构建奇幻文学数据采集分析系统
  • BM25 vs TF-IDF:经典文本检索方法的对比
  • 【39】OpenCV C++实战篇——直线拟合、直线测距、平行线段测距;(边缘检测,剔除噪点,轮廓检测,渐进概率霍夫直线)
  • Django管理后台结合剪映实现课件视频生成应用
  • MySQL架构
  • MySQL实战45讲 24-25
  • hadoop技术栈(九)Hbase替代方案
  • Linux 进程间通信(IPC):信号、共享内存
  • Vue3 el-table实现 将子表字段动态显示在主表行尾
  • MySQL 三大日志:redo log、undo log、binlog 详解
  • 在职老D渗透日记day21:sqli-labs靶场通关(第27a关)get联合注入 过滤select和union “闭合
  • 趣谈设计模式之策略模式-比特咖啡给你一杯满满的情绪价值,让您在数字世界里”畅饮“
  • 基于VLM 的机器人操作视觉-语言-动作模型:综述 2
  • 选项式api和组合式api
  • 如何将Date类型的数据转换为LocalDateTime类型
  • Git的初步学习
  • 【力扣 Hot100】 刷题日记——双指针的经典应用
  • RabbitMQ:SpringAMQP Fanout Exchange(扇型交换机)
  • Java技术总监的成长之路(技术干货分享)
  • 驱动开发系列65 - NVIDIA 开源GPU驱动open-gpu-kernel-modules 目录结构