线性代数|机器学习-P11方程Ax=b求解研究

news2024/10/6 10:34:18

文章目录

  • 1. 变量数和约束条件数大小分类
  • 2. 最小二乘法和Gram-schmidt变换
    • 2.1 Gram-schmidt变换
    • 2.2 最小二乘法
      • 2.2.1 损失函数-Lasso 和regression
      • 2.2.2 损失函数-Lasso
      • 2.2.3 损失函数-regression
      • 2.2.4 Regression岭回归-矩阵验证
      • 2.2.5 Regression岭回归-导数验证
  • 3. 迭代和随机采样
    • 3.1 迭代
    • 3.2 随机采样

1. 变量数和约束条件数大小分类

  • 0 用伪逆矩阵 x = A + b x=A^{+}b x=A+b直接求解,[上一节已讲]
  • 1 当矩阵A大小适中,条件数 σ 1 σ r < 1000 时 \frac{\sigma_1}{\sigma_r}<1000时 σrσ1<1000, 用 x = A \ b x=A\backslash b x=A\b
  • 2 当矩阵A列满秩m>n=r时,方程数多于变量数,无法求解,只能择中找近似解,将b投影到矩阵A的列空间中后,再找到近似解 x ^ \hat{x} x^ A T A x ^ = A T b → x ^ = ( A T A ) − 1 A T b A^TA\hat{x}=A^Tb\rightarrow \hat{x}=(A^TA)^{-1}A^Tb ATAx^=ATbx^=(ATA)1ATb
  • 3 当矩阵m < n时,方程数小于变量数,有无穷多的解,约束不够,所以我们增加 L 1 , L 2 L_1,L2 L1,L2约束来在众多的解中拿到一个好的解,这是深度学习中最重要的损失函数解决思路。

2. 最小二乘法和Gram-schmidt变换

2.1 Gram-schmidt变换

  • 4 列向量情况很差,条件数 σ 1 σ r > 1000 \frac{\sigma_1}{\sigma_r}>1000 σrσ1>1000,就是病态矩阵,简单理解就是矩阵A的列向量之间相关性太大,导致无法用相关性的列表示其他向量;
    当我们矩阵A的列向量为 a 1 , a 2 a_1,a_2 a1,a2时候,我们用 a 1 , a 2 a_1,a_2 a1,a2表示 v 3 v_3 v3时候,特别不方便, a 1 , a 2 a_1,a_2 a1,a2越相近,越不方便,就是所说的列向量相关性太大,那gram-schmidt的方式就是,既然 a 1 , a 2 a_1,a_2 a1,a2太接近,那就改造其中一个,我们把 a 1 a_1 a1经过投影和相减后得到 a 11 a_{11} a11,那么 a 11 ⊥ a 2 a_{11}\perp a_2 a11a2,这样我们就用新的正交向量 a 11 , a 3 a_{11},a_3 a11,a3来表示 v 3 v_3 v3. 将A分解为QR后就可以得到最优解 x ^ \hat{x} x^,具体推导可以看上一节内容。另外一种是通过将列进行旋转,原理和行的交换一样,主要是关于数值稳定性的问题,保证不要出现大数吃小数的现象发生。
    在这里插入图片描述

2.2 最小二乘法

2.2.1 损失函数-Lasso 和regression

  • 5 矩阵A接近奇异矩阵,该矩阵的值不是满秩,无法进行直接求逆得到 A − 1 A^{-1} A1逆矩阵,就是会得到很多的解,我们的目的是从这么多的解中找到一个最好的解,目前加 L 1 L_1 L1项,即加 λ ∣ ∣ x ∣ ∣ 1 \lambda||x||_1 λ∣∣x1,即是我们的LASSO模型;加 L 2 L_2 L2项目,即加 δ 2 ∣ ∣ x ∣ ∣ 2 2 \delta^2||x||_2^2 δ2∣∣x22,即是我们的岭回归模型,是不是很神奇!!!,后面还有的是两个都加,后续会学习到的!!!

2.2.2 损失函数-Lasso

  • Lasso 模型
    arg ⁡ m i n 1 2 ∣ ∣ A x − b ∣ ∣ 2 2 + λ ∣ ∣ x ∣ ∣ 1 \begin{equation} \arg\limits_{min}\frac{1}{2}||Ax-b||_2^2+\lambda||x||_1 \end{equation} minarg21∣∣Axb22+λ∣∣x1
  • Redge 模型,在 δ \delta δ较小的时候 1 2 δ 2 \frac{1}{2}\delta^2 21δ2 δ 2 \delta^2 δ2无区别

2.2.3 损失函数-regression

z = arg ⁡ m i n 1 2 ∣ ∣ A x − b ∣ ∣ 2 2 + 1 2 δ 2 ∣ x ∣ ∣ 1 2 \begin{equation} z=\arg\limits_{min}\frac{1}{2}||Ax-b||_2^2+\frac{1}{2}\delta^2|x||_1^2 \end{equation} z=minarg21∣∣Axb22+21δ2x12

  • z的矩阵表达式
    z = arg ⁡ m i n 1 2 ∣ ∣ A x − b ∣ ∣ 2 2 + 1 2 ∣ ∣ δ I x − 0 ∣ ∣ 1 2 \begin{equation} z=\arg\limits_{min}\frac{1}{2}||Ax-b||_2^2+\frac{1}{2}||\delta Ix-0||_1^2 \end{equation} z=minarg21∣∣Axb22+21∣∣δIx0∣12
  • 也就是说惩罚项重新构成了增广矩阵 A ∗ , b ∗ A^*,b^* A,b
    [ A σ I ] [ x ] = [ b 0 ] → A ∗ x = b ∗ → ( A T A + σ 2 I ) x = A T b \begin{equation} \begin{bmatrix}A\\\\ \sigma I\end{bmatrix}\begin{bmatrix}x\end{bmatrix}=\begin{bmatrix}b\\\\0\end{bmatrix}\rightarrow A^*x=b^*\rightarrow (A^TA+\sigma^2 I)x=A^Tb \end{equation} AσI [x]= b0 Ax=b(ATA+σ2I)x=ATb
  • 对于一般矩阵A,不是特别大的矩阵A,解如下:
    ( A T A + σ 2 I ) x = A T b → x ^ = ( A T A + σ 2 I ) − 1 A T b \begin{equation} (A^TA+\sigma^2 I)x=A^Tb\rightarrow \hat{x}=(A^TA+\sigma^2I)^{-1}A^Tb \end{equation} (ATA+σ2I)x=ATbx^=(ATA+σ2I)1ATb

2.2.4 Regression岭回归-矩阵验证

  • 验证上述是否正确,假设矩阵A为[a],整理可得如下:
    ( A T A + σ 2 I ) x = A T b → ( a 2 + σ 2 ) x = a b \begin{equation} (A^TA+\sigma^2 I)x=A^Tb\rightarrow (a^2+\sigma^2)x=ab \end{equation} (ATA+σ2I)x=ATb(a2+σ2)x=ab
    – 当 a 2 + σ 2 ≠ 0 a^2+\sigma^2 \neq 0 a2+σ2=0:
    ( a 2 + σ 2 ) x = a b → x ^ = a a 2 + σ 2 b \begin{equation} (a^2+\sigma^2)x=ab\rightarrow \hat{x}=\frac{a}{a^2+\sigma^2}b \end{equation} (a2+σ2)x=abx^=a2+σ2ab
  • σ = 0 , a ≠ 0 \sigma=0,a\ne 0 σ=0,a=0时,可得:
    ( a 2 + σ 2 ) x = a b → x ^ = a a 2 + σ 2 b → x ^ = b a \begin{equation} (a^2+\sigma^2)x=ab\rightarrow \hat{x}=\frac{a}{a^2+\sigma^2}b\rightarrow \hat{x}=\frac{b}{a} \end{equation} (a2+σ2)x=abx^=a2+σ2abx^=ab
    – 当 a 2 + σ 2 = 0 → a = σ = 0 a^2+\sigma^2 =0\rightarrow a=\sigma=0 a2+σ2=0a=σ=0:
    z = arg ⁡ m i n 1 2 ∣ ∣ A x − b ∣ ∣ 2 2 + 1 2 δ 2 ∣ x ∣ ∣ 1 2 → z = 1 2 ( a x − b ) 2 \begin{equation} z=\arg\limits_{min}\frac{1}{2}||Ax-b||_2^2+\frac{1}{2}\delta^2|x||_1^2\rightarrow z=\frac{1}{2}(ax-b)^2 \end{equation} z=minarg21∣∣Axb22+21δ2x12z=21(axb)2
    此时的z是向上的抛物线,那么可得最小值就一定在x=0处。

2.2.5 Regression岭回归-导数验证

z = arg ⁡ m i n 1 2 ∣ ∣ A x − b ∣ ∣ 2 2 + 1 2 δ 2 ∣ x ∣ ∣ 1 2 = 1 2 ( a x − b ) 2 + 1 2 δ 2 x 2 \begin{equation} z=\arg\limits_{min}\frac{1}{2}||Ax-b||_2^2+\frac{1}{2}\delta^2|x||_1^2=\frac{1}{2}(ax-b)^2+\frac{1}{2}\delta^2x^2 \end{equation} z=minarg21∣∣Axb22+21δ2x12=21(axb)2+21δ2x2

  • 求导可得:
    ∂ z ∂ x = a ( a x − b ) + σ 2 x = 0 → ( a 2 + σ 2 ) x ^ = a b → 居然跟矩阵表达式一样 \begin{equation} \frac{\partial z}{\partial x}=a(ax-b)+\sigma^2x=0\rightarrow (a^2+\sigma^2)\hat{x}=ab\rightarrow 居然跟矩阵表达式一样 \end{equation} xz=a(axb)+σ2x=0(a2+σ2)x^=ab居然跟矩阵表达式一样
    所以我们暂时简单验证我们在最小二乘法中加二范数惩罚项是对的!!!

  • 以上是损失函数的设计,也就是我们通过添加损失函数的约束条件来明确我们的目标,那么目标有了,现在缺少怎么找到目标的方法,常见的有随机梯度下降等方法,里面设计到学习率,迭代次数等,目的是怎么快速的找到最小的损失函数值,并根据结果来更新权重参数,这样矩阵就和深度学习联系上啦!

  • 好的解指的是我们的解不仅对已知的数据集有好的损失函数值,同时我们的解还能对未知的数据有好的结果!有效性和泛化性都要有!!!

3. 迭代和随机采样

3.1 迭代

  • 6 迭代
    当矩阵很大的时候,但是不是超级巨大,我们可以用迭代的方法处理,将矩阵A分解为
    A = S − T → A x = b → S x = T x + b \begin{equation} A=S-T\rightarrow Ax=b\rightarrow Sx=Tx+b \end{equation} A=STAx=bSx=Tx+b
  • 迭代可得:
    S x k + 1 = T x k + b ; S x k = T x k − 1 + b ; → S ( x − x k + 1 ) = T ( x − x k ) \begin{equation} Sx_{k+1}=Tx_k + b;Sx_{k}=Tx_{k-1} + b;\rightarrow S(x-x_{k+1})=T(x-x_k) \end{equation} Sxk+1=Txk+b;Sxk=Txk1+b;S(xxk+1)=T(xxk)
  • 误差比可得:
    x − x k + 1 x − x k = S − 1 T \begin{equation} \frac{x-x_{k+1}}{x-x_k}=S^{-1}T \end{equation} xxkxxk+1=S1T
  • S − 1 T S^{-1}T S1T<1时,随着 S − 1 T S^{-1}T S1T越小, x k x_k xk收敛的快。

3.2 随机采样

  • 7 随机采样
    当矩阵A超级大的时候,我们用电脑计算已经无法直接计算 A T A A^TA ATA的时候,我们就需要用到神奇的概率采样技术了,我们通过一定的概率去采样得到新的矩阵 A s A_s As时,用 A s A_s As近似替代A。
    我们知道矩阵A左乘行变换,右乘列变换,当我们用x来采样A列向量时,得到 A x = A s l Ax=A_{sl} Ax=Asl,实现列采样,当我们用x来采样A行向量时,得到 A T x = A s r A^Tx=A_{sr} ATx=Asr,实现行采样,这样我们就可以用采样的小样本来代替大样本矩阵A了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1806471.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

牛客网刷题 | BC119 最高分与最低分之差

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 输入n个成绩&#…

STM32F103C8T6 HAL库串口重定向

前言&#xff1a; 这里仅用做个人记录&#xff0c;实现USART1串口通信&#xff0c;并通过printf重定向输出“串口打印测试” 正文开始&#xff1a; 首先在STM32CubeMX上对串口进行配置&#xff0c;其实方法也非常简单。 按照箭头顺序&#xff0c;先点击Connectivity找到USART1…

NineData云原生智能数据管理平台新功能发布|2024年5月版

重点发布​ 数据库 DevOps - 表分组查询​ 在企业用户规模达到一定程度后&#xff0c;分库分表成为一种常见的数据库架构选择。在这种情况下&#xff0c;查询和维护数据需要高效的解决方案&#xff0c;以避免手动逐一查询、变更和汇总多个分库和分表的繁琐操作。 库分组变更…

泛微开发修炼之旅--13通过Ecology拦截器(注解的方式),拦截后端接口,实现接口执行成功后或执行前操作源码示例

文章链接&#xff1a;泛微开发修炼之旅--13通过Ecology拦截器(注解的方式)&#xff0c;拦截后端接口&#xff0c;实现接口执行成功后或执行前操作源码示例

[个人感悟] Java基础问题应该考察哪些问题?

前言 “一切代码无非是数据结构和算法流程的结合体.” 忘了最初是在何处看见这句话了, 这句话, 对于Java基础的考察也是一样. 正如这句话所说, 我们对于基础的考察主要考察, 数据结构, 集合类型结构, 异常类型, 已经代码的调用和语法关键字. 其中数据结构和集合类型结构是重点…

牛客网刷题 | BC117 逆序输出

目前主要分为三个专栏&#xff0c;后续还会添加&#xff1a; 专栏如下&#xff1a; C语言刷题解析 C语言系列文章 我的成长经历 感谢阅读&#xff01; 初来乍到&#xff0c;如有错误请指出&#xff0c;感谢&#xff01; 描述 输入10个整数&…

ssm629基于SSM的二手交易平台设计与开发+jsp【已测试】

前言&#xff1a;&#x1f469;‍&#x1f4bb; 计算机行业的同仁们&#xff0c;大家好&#xff01;作为专注于Java领域多年的开发者&#xff0c;我非常理解实践案例的重要性。以下是一些我认为有助于提升你们技能的资源&#xff1a; &#x1f469;‍&#x1f4bb; SpringBoot…

安装windows11系统跳过微软账号登录,使用本地账号登录方法

在安装win11系统&#xff0c;进行到如图下所示界面的时候&#xff0c;暂停下 我们可以按下键盘的ShiftF10按键&#xff08;部分电脑是FnShiftF10&#xff09;&#xff0c;这时屏幕会出现命令行窗口&#xff0c;如图下所示 我们需要在命令行内输入代码oobe\bypassnro.cmd然后回车…

Linxu: Dynamic debug 简介

文章目录 1. 前言2. 什么是 Dynamic debug (dyndbg) ?3. Dynamic debug (dyndbg) 的使用3.1 开启 Dynamic debug (dyndbg) 功能3.2 使用 Dynamic debug (dyndbg) 功能 4. Dynamic debug (dyndbg) 的实现4.1 内核接口 dynamic_pr_debug() 的实现4.2 debugfs 导出控制节点 contr…

嵌入式中C语言经典的面试题分享

#error的作用是什么? #error 指令让预处理器发出一条错误信息,并且会中断编译过程。下面我们从Linux代码中抽取出来一小段代码并做修改得到示例代码: 这段示例代码很简单,当RX_BUF_IDX宏的值不为0~3时,在预处理阶段就会通过 #error 指令输出一条错误提示信息: "…

spring boot +Scheduled 动态定时任务配置

通常情况下我们设定的定时任务都是固定的,有时候需要我们动态的配置定时任务,下面看代码 import com.mybatisflex.core.query.QueryWrapper; import com.yzsec.dsg.web.modules.exportpwd.entity.ExportPwd; import com.yzsec.dsg.web.modules.exportpwd.entity.table.Export…

嵌入式单片机产品微波炉拆解分享

在厨房电器中,微波炉可以说是最具技术含量的电器,它的工作原理不像其他电器那样一眼就能看个明白,于是拆解了一个微波炉,分析内部电路。 微波炉的结构 微波炉由箱体、磁控管、变压器、高压电容器、高压二极管、散热风扇、转盘装置及一系列控制保护开关组成,大多数微波炉还…

人工智能和物联网如何结合

欢迎来到 Papicatch的博客 文章目录 &#x1f349;引言 &#x1f349;AI与IoT的结合方式 &#x1f348;数据处理和分析 &#x1f34d;实例 &#x1f348;边缘计算 &#x1f34d;实例 &#x1f348;自动化和自主操作 &#x1f34d;实例 &#x1f348;安全和隐私保护 &…

【Python】探索 One-Class SVM:异常检测的利器

我已经从你的 全世界路过 像一颗流星 划过命运 的天空 很多话忍住了 不能说出口 珍藏在 我的心中 只留下一些回忆 &#x1f3b5; 牛奶咖啡《从你的全世界路过》 在数据科学和机器学习领域&#xff0c;异常检测&#xff08;Anomaly Detection&#xff09;是…

使用 Vue 官方脚手架初始化 Vue3 项目

Vite 官网&#xff1a;https://cn.vitejs.dev/ Vue 官网&#xff1a;https://vuejs.org/ Vue 官方文档&#xff1a;https://cn.vuejs.org/guide/introduction.html Element Plus 官网&#xff1a;https://element-plus.org/ Tailwind CSS 官网&#xff1a;https://tailwindcss.…

DS:堆的结构与实现

欢迎来到Harper.Lee的学习世界&#xff01;博主主页传送门&#xff1a;Harper.Lee的博客主页想要一起进步的uu可以来后台找我哦&#xff01; 一、堆的概念与结构 1.1 堆的概念 堆&#xff08;Heap&#xff09;是完全二叉树中的一种&#xff0c;分为大根堆和小根堆。 特点&#…

【RAG入门教程03】Langchian框架-文档加载

Langchain 使用文档加载器从各种来源获取信息并准备处理。这些加载器充当数据连接器&#xff0c;获取信息并将其转换为 Langchain 可以理解的格式。 LangChain 中有几十个文档加载器&#xff0c;可以在这查看https://python.langchain.com/v0.2/docs/integrations/document_lo…

BabylonJS 6.0文档 Deep Dive 动画(四):通过动画排序制作卡通片

一种最为直接的方法是为每个动画剪辑&#xff08;Animatin Clip&#xff09;指定开始时间&#xff0c;最终形成一个卡通动画&#xff08;Cartoon&#xff09;。 1. 设计 1.1 概述 动画的脚本如下&#xff1a; 摄像机显示了一栋带门的建筑物。摄像机靠近门并停止。门打开&am…

【数据结构】队列——循环队列(详解)

目录 0 循环队列 1 特定条件下循环队列队/空队满判断条件 1.1 队列为空的条件 1.2 队列为满的条件 2 循环队列的实现 3 示例 4 注意事项 0 循环队列 循环队列&#xff08;Circular Queue&#xff09;是队列的一种实现方式&#xff0c;它通过将队列存储空间的最后一…

高考后的职业规划:学习LabVIEW开发前景广阔

在今天的高考后&#xff0c;选择学习LabVIEW开发为未来职业规划将大有可为。LabVIEW以其图形化编程、强大的数据处理和硬件集成功能&#xff0c;广泛应用于工程、科研、自动化测试等领域。掌握LabVIEW开发技能&#xff0c;不仅就业前景广阔&#xff0c;还能参与前沿技术应用&am…