要解决的问题

在工程应用中,我们经常会用一组观测数据去估计模型的参数,模型是我们根据先验知识定下的。比如我们有一组观测数据(xi,yi)(x_i,y_i)(xi​,yi​)(一维),通过一些数据分析我们猜测yyy和xxx之间存在线性关系,那么我们的模型就可以定为:f(x)=kx+bf(x)=kx+bf(x)=kx+b

这个模型只有两个参数,所以理论上,我们只需要观测两组数据建立两个方程,即可解出两个未知数。类似的,假如模型有nnn个参数,我们只需要观测nnn组数据就可求出参数,换句话说,在这种情况下,模型的参数是唯一确定解。

但是在实际应用中,由于我们的观测会存在误差(偶然误差、系统误差等),所以我们总会做多余观测。比如在上述例子中,尽管只有两个参数,但是我们可能会观测nnn组数据(x1,y1)..,(xn,yn)(x_1, y_1)..,(x_n, y_n)(x1​,y1​)..,(xn​,yn​),这会导致我们无法找到一条直线经过所有的点,也就是说,方程无确定解。

于是这就是我们要解决的问题:虽然没有确定解,但是我们能不能求出近似解,使得模型能在各个观测点上达到“最佳“拟合。那么“最佳”的准则是什么?可以是所有观测点到直线的距离和最小,也可以是所有观测点到直线的误差(真实值-理论值)绝对值和最小,也可以是其它,如果是你面临这个问题你会怎么做?

早在19世纪,勒让德就认为让“误差的平方和最小”估计出来的模型是最接近真实情形的。

为什么就是误差平方而不是其它的,这个问题连欧拉、拉普拉斯都未能成功回答,后来是高斯建立了一套误差分析理论,从而证明了确实是使误差平方和最小的情况下系统是最优的。理论的证明也并不难,我写在了另外一篇博客 最小二乘法的原理理解,相信你了解后会对最小二乘法有更深刻的认识。

按照勒让德的最佳原则,于是就是求:
L=∑i=1n(yi−f(x))2L=\sum_{i=1}^{n}\left(y_i-f(x)\right)^{2}L=i=1∑n​(yi​−f(x))2
这个目标函数取得最小值时的函数参数,这就是最小二乘法的思想,所谓“二乘”就是平方的意思。从这里我们可以看到,最小二乘法其实就是用来做函数拟合的一种思想

至于怎么求出具体的参数那就是另外一个问题了,理论上可以用导数法、几何法,工程上可以用梯度下降法。下面以最常用的线性回归为例进行推导和理解。

线性回归

线性回归因为比较简单,可以直接推导出解析解,而且许多非线性的问题也可以转化为线性问题来解决,所以得到了广泛的应用。甚至许多人认为最小二乘法指的就是线性回归,其实并不是,最小二乘法就是一种思想,它可以拟合任意函数,线性回归只是其中一个比较简单而且也很常用的函数,所以讲最小二乘法基本都会以它为例。

下面我会先用矩阵法进行推导,然后再用几何法来帮助你理解最小二乘法的几何意义。

矩阵解法

线性回归定义为:hθ(x1,x2,…xn−1)=θ0+θ1x1+…+θn−1xn−1h_{\theta}\left(x_{1}, x_{2}, \ldots x_{n-1}\right)=\theta_{0}+\theta_{1} x_{1}+\ldots+\theta_{n-1} x_{n-1}hθ​(x1​,x2​,…xn−1​)=θ0​+θ1​x1​+…+θn−1​xn−1​(θ\thetaθ为参数)假设现在有mmm个样本,每个样本有n−1n-1n−1维特征,将所有样本点代入模型中得:
h1=θ0+θ1x1,1+θ2x1,2+…+θn−1x1,n−1h2=θ0+θ1x2,1+θ2x2,2+…+θn−1x2,n−1⋮hm=θ0+θ1xm,1+θ2xm,2+…+θn−1xm,n−1\begin{array}{l} h_{1}=\theta_{0}+\theta_{1} x_{1,1}+\theta_{2} x_{1,2}+\ldots+\theta_{n-1} x_{1,n-1} \\ h_{2}=\theta_{0}+\theta_{1} x_{2,1}+\theta_{2} x_{2,2}+\ldots+\theta_{n-1} x_{2,n-1}\\ \vdots \\ h_{m}=\theta_{0}+\theta_{1} x_{m, 1}+\theta_{2} x_{m, 2}+\ldots+\theta_{n-1} x_{m, n-1} \end{array}h1​=θ0​+θ1​x1,1​+θ2​x1,2​+…+θn−1​x1,n−1​h2​=θ0​+θ1​x2,1​+θ2​x2,2​+…+θn−1​x2,n−1​⋮hm​=θ0​+θ1​xm,1​+θ2​xm,2​+…+θn−1​xm,n−1​​为方便用矩阵表示,我们令x0=1x_0=1x0​=1,于是上述方程可以用矩阵表示为:
h=Xθ\mathbf{h}=\mathbf{X} \thetah=Xθ其中,h\mathbf{h}h为mx1的向量, 代表模型的理论值,θ\thetaθ 为nx1的向量,XXX为mxn维的矩阵,mmm代表样本的个数,nnn代表样本的特征数,于是目标损失函数用矩阵表示为:
J(θ)=∥h−Y∥2=∥Xθ−Y∥2=(Xθ−Y)T(Xθ−Y)J(\theta)=\|\mathbf{h}-\mathbf{Y}\|^2 =\|\mathbf{X}\theta-\mathbf{Y}\|^2= (\mathbf{X} \theta-\mathbf{Y})^{T}(\mathbf{X} \theta-\mathbf{Y}) J(θ)=∥h−Y∥2=∥Xθ−Y∥2=(Xθ−Y)T(Xθ−Y)其中Y\mathbf{Y}Y是样本的输出向量, 维度为mx1。

根据高数知识我们知道函数取得极值就是导数为0的地方,所以我们只需要对损失函数求导令其等于0就可以解出θ\thetaθ。矩阵求导属于矩阵微积分的内容,我也是现学的(…,这里先介绍两个用到的公式:
∂xTa∂x=∂aTx∂x=a\frac{\partial x^{T} a}{\partial x}=\frac{\partial a^{T} x}{\partial x}=a∂x∂xTa​=∂x∂aTx​=a∂xTAx∂x=Ax+ATx\frac{\partial x^{T} A x}{\partial x}=A x+A^{T} x∂x∂xTAx​=Ax+ATx如果矩阵A是对称的:Ax+ATx=2AxA x+A^{T} x=2 A xAx+ATx=2Ax对目标函数化简:
J(θ)=θTXTXθ−θTXTY−YTXθ+YTYJ(\theta)=\theta^{T} X^{T} X \theta-\theta^{T} X^{T}Y-Y^{T} X\theta+Y^{T} Y J(θ)=θTXTXθ−θTXTY−YTXθ+YTY求导令其等于0:∂∂θJ(θ)=2XTXθ−2XTY=0\frac{\partial}{\partial \theta} J(\theta)=2X^{T} X \theta-2X^TY=0∂θ∂​J(θ)=2XTXθ−2XTY=0解得 θ=(XTX)−1XTY\theta=\left(X^{T}X\right)^{-1} X^{T}Yθ=(XTX)−1XTY,经过推导我们得到了θ\thetaθ的解析解,现在只要给了数据,我们就可以带入解析解中直接算出θ\thetaθ。

几何意义

几何意义会直观的帮助你理解最小二乘法究竟在干什么。首先先来解释一下矩阵乘法的几何意义,对于一个方程组AxAxAx,我们可以看做是xxx对矩阵AAA的列向量的线性组合,比如:

{1×x1+x2=3−1×x1+x2=1⇔[11−11][x1x2]=[31]⇔A×x=b\left\{\begin{array}{l} 1 \times x_{1}+x_{2}=3 \\ -1 \times x_{1}+x_{2}=1 \end{array} \Leftrightarrow\left[\begin{array}{ll} 1 & 1 \\ -1 & 1 \end{array}\right]\left[\begin{array}{l} x_{1} \\ x_{2} \end{array}\right]=\left[\begin{array}{l} 3 \\ 1 \end{array}\right] \Leftrightarrow A \times x=b\right.{1×x1​+x2​=3−1×x1​+x2​=1​⇔[1−1​11​][x1​x2​​]=[31​]⇔A×x=b
可以看作:
[1−1]×x1+[11]×x2=[31]⇔a1×x1+a2×x2=b\left[\begin{array}{c} 1 \\ -1 \end{array}\right] \times x_{1}+\left[\begin{array}{c} 1 \\ 1 \end{array}\right] \times x_{2}=\left[\begin{array}{l} 3 \\ 1 \end{array}\right] \Leftrightarrow a_{1} \times x_{1}+a_{2} \times x_{2}=b[1−1​]×x1​+[11​]×x2​=[31​]⇔a1​×x1​+a2​×x2​=b
画在坐标轴上可以看到,向量b\mathbf{b}b其实就是向量a1\mathbf{a_1}a1​与a2\mathbf{a_2}a2​的线性组合,因为他们都是在一个平面上,显然是有解的。

但是如文章开头所说,由于存在观测误差,我们往往会做多余观测,比如要拟合一次方程 y=kx+by=k x+by=kx+b,我们可能观测了三个点(0,2),(1,2),(2,3),写成矩阵形式如下(为表述方便,用x1代替k,x2代替b ):
{1×x1+x2=20×x1+x2=22×x1+x2=3⇔[110121][x1x2]=[223]⇔A×x=b\left\{\begin{array}{l} 1 \times x_{1}+x_{2}=2 \\ 0 \times x_{1}+x_{2}=2 \\ 2 \times x_{1}+x_{2}=3 \end{array} \Leftrightarrow\left[\begin{array}{ll} 1 & 1 \\ 0 & 1 \\ 2 & 1 \end{array}\right]\left[\begin{array}{l} x_{1} \\ x_{2} \end{array}\right]=\left[\begin{array}{l} 2 \\ 2 \\ 3 \end{array}\right] \Leftrightarrow A \times x=b\right.⎩⎨⎧​1×x1​+x2​=20×x1​+x2​=22×x1​+x2​=3​⇔⎣⎡​102​111​⎦⎤​[x1​x2​​]=⎣⎡​223​⎦⎤​⇔A×x=b
表示成线性组合的方式:
[102]×x1+[111]×x2=[223]⇔a1×x1+a2×x2=b\left[\begin{array}{l} 1 \\ 0 \\ 2 \end{array}\right] \times x_{1}+\left[\begin{array}{l} 1 \\ 1 \\ 1 \end{array}\right] \times x_{2}=\left[\begin{array}{l} 2 \\ 2 \\ 3 \end{array}\right] \Leftrightarrow a_{1} \times x_{1}+a_{2} \times x_{2}=b⎣⎡​102​⎦⎤​×x1​+⎣⎡​111​⎦⎤​×x2​=⎣⎡​223​⎦⎤​⇔a1​×x1​+a2​×x2​=b

画在图中如下:

从图中我们可以看到,无论 a1\mathbf{a_1}a1​ 和 a2\mathbf{a_2}a2​ 怎么线性组合都不可能得到 b\mathbf{b}b,因为 a1\mathbf{a_1}a1​ 和 a2\mathbf{a_2}a2​ 的线性组合成的向量只能落在它们组成的子空间 S\mathbf{S}S 中。

退而求其次,虽然我们不可能得到 b\mathbf{b}b,但在S\mathbf{S}S上找一个和b\mathbf{b}b最接近的总可以吧。那么将b\mathbf{b}b投影 在平面S\mathbf{S}S上得到的向量p\mathbf{p}p就是和b\mathbf{b}b最接近的向量(把向量看作点,最接近的意思就是点到平面某点取得距离最短,自然就是投影所成的交点)。

换句话说,方程组Ax=bAx=bAx=b虽然无解,也就是b不在A的列空间中,但是我们可以在AAA的列空间中找到一个和bbb最接近的向量ppp,ppp就是bbb在AAA的列空间中的投影,通过求Ax=pAx=pAx=p的解,就是原方程的最小二乘解。

由几何意义可知垂线e=b−p=b−Axe=b-p=b-Axe=b−p=b−Ax正交于平面 S\mathbf{S}S,也就是a1Te=0,a2Te=0a_{1}^{T} e=0, a_{2}^{T} e=0a1T​e=0,a2T​e=0,写成矩阵形式:
ATe=AT(b−Ax)=ATb−ATAx=0\begin{array}{c} A^{T} e=A^{T}(b-Ax)=A^{T} b-A^{T} Ax=0 \end{array}ATe=AT(b−Ax)=ATb−ATAx=0​解得 x=(ATA)−1ATbx=\left(A^{T} A\right)^{-1} A^{T} bx=(ATA)−1ATb,可以看到推导结果和矩阵法一样。从上面可以看到,最小二乘法的几何意义就是求解 bbb 在AAA的列向量空间中的投影

到这里最小二乘法的推导已经完成了,但是我们忽略了一个问题,就是假如ATAA^TAATA不可逆怎么办?这个问题我写在了另外一篇文章 详解岭回归与L2正则化

以上就是全部内容。

相关推荐阅读:
最小二乘法的原理理解
详解岭回归与L2正则化

另外推荐一篇关于主成成分分析PCA写得也很不错的文章:
通俗易懂的PCA原理及代码实现(超详细推导)

Reference
https://www.cnblogs.com/pinard/p/5976811.html
https://zhuanlan.zhihu.com/p/38128785
https://www.zhihu.com/question/304164814/answer/549972357

如果对你有帮助,请点个赞让我知道:-D

一文让你彻底搞懂最小二乘法(超详细推导)相关推荐

  1. I2C协议靠这16张图彻底搞懂(超详细)

    文章目录 背景 硬件层 数据传输协议 实际上如何工作? 单个主设备连接多个从机 多个主设备连接多个从机 如何编程? 总结 背景 I²C(Inter-Integrated Circuit),中文应该叫集 ...

  2. 一文带你彻底搞懂i++和++i的区别,谁的效率更高?

    作者简介:Codebowl靓仔,学妹的工具人,C++开发误入数据开发,梦想30岁退休的靓仔就是我啦. i++和++i对于初学者来说,一直是一个特别容易搞混的内容,相信很多人现在也没有完全搞清(作者初学 ...

  3. lambda表达式java项目常用_一文带你彻底搞懂Lambda表达式

    1. 为什么使用Lambda表达式 Lambda是一个匿名函数,我们可以把Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递).可以写出更简洁.更灵活的代码.作为一种更紧凑的代码风 ...

  4. 一文让你彻底搞懂AQS(通俗易懂的AQS)

    一文让你彻底搞懂AQS(通俗易懂的AQS) 一.什么是AQS AQS是一个用来构建锁和同步器的框架,使用AQS能简单且高效地构造出应用广泛的大量的同步器,比如我们提到的ReentrantLock,Se ...

  5. 2.1.5 校验码(一文带你分析搞懂:奇偶校验码、海明码、CRC码)

    文章目录: 什么是校验码? 为什么要有校验码? 1.奇偶校验码 怎么通过奇偶校验码判断数据是正确还是错误呢? (1)奇校验 (2)偶校验 为什么无法检查出偶数个错误? 2.海明(汉明)校验码 什么是海 ...

  6. 19 种典型二极管应用电路,电路图+工作原理,一文总结,快速搞懂

    今天给大家分享19 个典型二极管应用电路,都是一些常用到并且典型的电路.(篇幅较长,建议收藏后,观看,图片可以点击放大.) 具体是以下19 种典型二极管应用电路: 1.二极管保护电路 2.二极管整流电 ...

  7. nginx作用_实战文档:彻底搞懂SpringBoot+微服务+Nginx+Docker+Tomcat

    前言 微服务架构(Microservice Architecture)是一种架构概念,旨在通过将功能分解到各个离散的服务中以实现对解决方案的解耦.你可以将其看作是在架构层次而非获取服务的类上应用很多S ...

  8. python中str函数_一文让你彻底搞懂Python中__str__和__repr__?

    __str__和__repr__的异同? 字符串的表示形式 我们都知道,Python的内置函数repr()能够把对象用字符串的形式表达出来,方便我们辨认.这就是"字符串表示形式". ...

  9. C++微服务RPC框架,一文带你彻底搞懂 RPC

    RPC(Remote Procedure Call),是一个大家既熟悉又陌生的词,只要涉及到通信,必然需要某种网络协议.我们很可能用过HTTP,那么RPC又和HTTP有什么区别呢?RPC还有什么特点, ...

最新文章

  1. LeetCode刷题中遇到的一些知识点
  2. python 动态导入类_从动态导入模块中类的字符串名动态实例化?
  3. 微信小程序从入门到飞起(各个组件)
  4. 如何查询SAP Cloud for Customer系统升级和维护时间
  5. 璀璨智行:V2X车路协同智慧交通
  6. python快速排序算法没看懂_python中的快速排序算法的理解
  7. Go 语言圣经-习题汇总(Go 程序设计语言/The Go Programming Language)
  8. win8 性能测试软件,win8系统优化软件评测
  9. 程序员快收藏:国内一二线城市的互联网公司汇总
  10. 如何在指板上寻找特殊和弦
  11. 从零开始开发IM(即时通讯)服务端(一)附源码
  12. 云更新无盘服务器缓存,云更新无盘服务器缓存设置
  13. 国产网络分析仪的介绍
  14. IE浏览器主页更改问题(在浏览器Internet的属性里怎么也修改不成功)
  15. GM(1,1)预测模型的残差检验、关联度检验、后验差检验代码
  16. PDF解密PDFPasswordRemover
  17. 免费的视频转换器有哪些?推荐3款好用免费视频格式转换软件
  18. Python-pip与模块安装
  19. 什么是平台无关性,Java是如何做到平台无关的
  20. Mysql搜寻姓_mysql – 用于搜索名称和姓氏的最有效的sql架构

热门文章

  1. js中的设计模式之享元模式
  2. flutter图片聊天泡泡_flutter/dart聊天实例|flutter仿微信
  3. 手把手演示Ngnix+Tomcat实现动静分离
  4. Nodejs学习(5)一个简单的koa2的示例
  5. koa2 mysql_node+koa2+mysql入门
  6. 背景差分法 matlab程序,背景差分法matlab实现
  7. U盘不显示盘符问题怎么办?
  8. xxd,od,hexdump
  9. Oracle如何实现动态行列转换,Oracle实现行列转换的方法分析
  10. 使用jodd-email实现邮件发送