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

彩笔运维勇闯机器学习--最小二乘法的数学推导

前言

今天我们来讨论一下回归算法当中的数学实现。本人数学也是渣,大学时期概率论一直挂到清考才勉强通过,+_+ !!,如今勇闯机器学习,硬着头皮重新学习了微积分和线代,也是为了记录自己最近的状态,避免过段时间忘记了。描述的时候有不周全的地方,请各位大佬们多担待了

本节将会运用一些数学知识来解释一下相关的回归算法的合理性,虽有些枯燥,但知其然也知其所以然,多了解一些总是好的

最小二乘法

最小二乘法的核心思想是找到一组参数,使得模型预测值与实际观测值之间的误差平方和最小。最小二乘法是回归模型中非常常用的计算回归系数的方法:

f=∑i=1n(yi−y^i)2\text{f} = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2f=i=1n(yiy^i)2

其中yiy_iyi是真实值,y^i\hat{y}_iy^i是预测值

推导过程

先用最简单的一元线性回归,一元线性回归的数学模型为:
yi^=β0+β1xi\hat{y_i}=β_0+β_1x_iyi^=β0+β1xi

带入公式:
f=∑i=1n(yi−(β0+β1xi))2=∑i=1n(yi−β0−β1xi)2\text{f} = \sum_{i=1}^{n} (y_i - (β_0+β_1x_i))^2 = \sum_{i=1}^{n} (y_i - β_0 - β_1x_i)^2f=i=1n(yi(β0+β1xi))2=i=1n(yiβ0β1xi)2

由于要讨论的是β0β_0β0β1β_1β1,这是一个多变量函数,为了研究单独变量,可以分别对其求偏导

∂f∂β0=(∑i=1n(yi−β0−β1xi)2)′\frac{\partial f}{\partial β_0} = (\sum_{i=1}^{n} (y_i - β_0 - β_1x_i)^2)'β0f=(i=1n(yiβ0β1xi)2)

首先,有限个数的求和之后的导数=有限个数导数之后求和,把(yi−β0−β1xi)2(y_i - β_0 - β_1x_i)^2(yiβ0β1xi)2看成一个整体

∂f∂β0=∑i=1n((yi−β0−β1xi)2)′\frac{\partial f}{\partial β_0} = \sum_{i=1}^{n} ((y_i - β_0 - β_1x_i)^2)'β0f=i=1n((yiβ0β1xi)2)

这是复合函数求导,那就来个剥洋葱法则,先对平方求导,再对加法求导

∂f∂β0=∑i=1n2(yi−β0−β1xi)⋅(yi−β0−β1xi)′\frac{\partial f}{\partial β_0} = \sum_{i=1}^{n} 2(y_i - β_0 - β_1x_i)⋅(y_i - β_0 - β_1x_i)'β0f=i=1n2(yiβ0β1xi)(yiβ0β1xi)

由于是对β0β_0β0求导,其余可认为是常数,求导为0

∂f∂β0=∑i=1n2(yi−β0−β1xi)⋅−1=−2∑i=1nβ0(yi−β0−β1xi)\frac{\partial f}{\partial β_0} = \sum_{i=1}^{n} 2(y_i - β_0 - β_1x_i) ⋅ -1 =-2\sum_{i=1}^{n} β_0(y_i - β_0 - β_1x_i)β0f=i=1n2(yiβ0β1xi)1=2i=1nβ0(yiβ0β1xi)

导数是函数切线的斜率,要找到函数的最小值,就是其导数为0的地方

∂f∂β0=−2∑i=1n(yi−β0−β1xi)=0\frac{\partial f}{\partial β_0}=-2\sum_{i=1}^{n} (y_i - β_0 - β_1x_i)=0β0f=2i=1n(yiβ0β1xi)=0

整理一下:

∑i=1n(yi−β0−β1xi)=∑i=1nyi−∑i=1nβ0−∑i=1nβ1xi=0\sum_{i=1}^{n} (y_i - β_0 - β_1x_i)=\sum_{i=1}^{n}y_i - \sum_{i=1}^{n}β_0 - \sum_{i=1}^{n}β_1x_i=0i=1n(yiβ0β1xi)=i=1nyii=1nβ0i=1nβ1xi=0
方程1: ∑i=1nyi=nβ0+β1⋅∑i=1nxi\sum_{i=1}^{n}y_i = nβ_0 + β_1⋅\sum_{i=1}^{n}x_ii=1nyi=nβ0+β1i=1nxi

同理对β1β_1β1求偏导

∂f∂β1=∑i=1n2(yi−β0−β1xi)⋅−xi=0\frac{\partial f}{\partial β_1} = \sum_{i=1}^{n} 2(y_i - β_0 - β_1x_i) ⋅ -x_i =0β1f=i=1n2(yiβ0β1xi)xi=0

整理一下:

∑i=1n2(yi−β0−β1xi)⋅−xi=−2(∑i=1nxiyi−∑i=1nβ0xi−∑i=1nβ1xi2)=0\sum_{i=1}^{n} 2(y_i - β_0 - β_1x_i) ⋅ -x_i=-2(\sum_{i=1}^{n} x_iy_i-\sum_{i=1}^{n}β_0x_i-\sum_{i=1}^{n}β_1x_i^2)=0i=1n2(yiβ0β1xi)xi=2(i=1nxiyii=1nβ0xii=1nβ1xi2)=0
方程2:

∑i=1nxiyi=β0⋅∑i=1nxi+β1⋅∑i=1nxi2\sum_{i=1}^{n} x_iy_i = β_0⋅\sum_{i=1}^{n}x_i+β_1⋅\sum_{i=1}^{n}x_i^2i=1nxiyi=β0i=1nxi+β1i=1nxi2

我们将样本数据(xi,yi)(x_i, y_i)(xi,yi)求平均值,就是样本均值

xˉ=1n∑i=1nxi\bar{x}=\frac{1}{n}\sum_{i=1}^{n}x_ixˉ=n1i=1nxi
yˉ=1n∑i=1nyi\bar{y}=\frac{1}{n}\sum_{i=1}^{n}y_iyˉ=n1i=1nyi

带入方程1:

yˉ=β0+β1xˉ\bar{y} = β_0 + β_1\bar{x}yˉ=β0+β1xˉ

β0β_0β0带入方程2计算β1β_1β1

∑i=1nxiyi=(yˉ−β1xˉ)⋅∑i=1nxi+β1⋅∑i=1nxi2=nxˉyˉ−nβ1xˉ2+β1⋅∑i=1nxi2\sum_{i=1}^{n} x_iy_i = (\bar{y} - β_1\bar{x})⋅\sum_{i=1}^{n}x_i+β_1⋅\sum_{i=1}^{n}x_i^2 = n\bar{x}\bar{y}-nβ_1\bar{x}^2+β_1⋅\sum_{i=1}^{n}x_i^2i=1nxiyi=(yˉβ1xˉ)i=1nxi+β1i=1nxi2=nxˉyˉnβ1xˉ2+β1i=1nxi2
∑i=1nxiyi−nxˉyˉ=β1(−nxˉ2+∑i=1nxi2)\sum_{i=1}^{n} x_iy_i - n\bar{x}\bar{y} = β_1(-n\bar{x}^2+\sum_{i=1}^{n}x_i^2)i=1nxiyinxˉyˉ=β1(nxˉ2+i=1nxi2)
β1=∑i=1nxiyi−nxˉyˉ∑i=1nxi2−nxˉ2β_1=\frac{\sum_{i=1}^{n} x_iy_i - n\bar{x}\bar{y}}{\sum_{i=1}^{n}x_i^2-n\bar{x}^2}β1=i=1nxi2nxˉ2i=1nxiyinxˉyˉ

经过漫长的推导:

β1=∑i=1nxiyi−nxˉyˉ∑i=1nxi2−nxˉ2β_1=\frac{\sum_{i=1}^{n} x_iy_i - n\bar{x}\bar{y}}{\sum_{i=1}^{n}x_i^2-n\bar{x}^2}β1=i=1nxi2nxˉ2i=1nxiyinxˉyˉ
β0=yˉ−β1xˉβ_0 = \bar{y} - β_1\bar{x}β0=yˉβ1xˉ

小结

通过最小二乘法,一步一步计算出截距与回归系数的公式,这其中用到的数学知识主要有:多元函数求偏导、导数的计算

多元回归下的最小二乘法

推导过程

多元线性回归的数学模型:
y=β0+β1x1+β2x2+⋯+βnxny = β_0 + β_1x_1 + β_2x_2 + \dots + β_nx_ny=β0+β1x1+β2x2++βnxn

相比于一元回归的最小二乘法,多元回归可谓有一点复杂,因为特征数量的增加,带来的样本与特征的快速上升

比如有3个样本,2个特征,记为:y=β0+β1x1+β2x2y = β_0 + β_1x_1 + β_2x_2y=β0+β1x1+β2x2

x(1)=[1,2]x^{(1)} = [1,2]x(1)=[1,2]
x(2)=[3,4]x^{(2)} = [3,4]x(2)=[3,4]
x(3)=[5,6]x^{(3)} = [5,6]x(3)=[5,6]

用矩阵表达:

X=[123456] X=\begin{bmatrix} 1 & 2 \\ 3 & 4 \\ 5 & 6 \end{bmatrix} X=135246

假设有m个特征,n个样本

y^i=β0+β1x1(1)+β2x2(1)+⋯+βnxn(1)\hat{y}_i = β_0 + β_1x_1^{(1)} + β_2x_2^{(1)} + \dots + β_nx_n^{(1)}y^i=β0+β1x1(1)+β2x2(1)++βnxn(1)
y^i=β0+β1x1(2)+β2x2(2)+⋯+βnxn(2)\hat{y}_i = β_0 + β_1x_1^{(2)} + β_2x_2^{(2)} + \dots + β_nx_n^{(2)}y^i=β0+β1x1(2)+β2x2(2)++βnxn(2)
.........
y^i=β0+β1x1(m)+β2x2(m)+⋯+βnxn(m)\hat{y}_i = β_0 + β_1x_1^{(m)} + β_2x_2^{(m)} + \dots + β_nx_n^{(m)}y^i=β0+β1x1(m)+β2x2(m)++βnxn(m)

X=[1x1(1)x2(1)…xn(1)1x1(2)x2(2)…xn(2)...1x1(m)x2(m)…xn(m)] X=\begin{bmatrix} 1 & x_1^{(1)} & x_2^{(1)} & \dots & x_n^{(1)} \\ 1 & x_1^{(2)} & x_2^{(2)} & \dots & x_n^{(2)} \\ ... \\ 1 & x_1^{(m)} & x_2^{(m)} & \dots & x_n^{(m)} \\ \end{bmatrix} X=11...1x1(1)x1(2)x1(m)x2(1)x2(2)x2(m)xn(1)xn(2)xn(m)

β=[β0β1...βn] β=\begin{bmatrix} β_0 \\ β_1 \\ ... \\ β_n \\ \end{bmatrix} β=β0β1...βn

所以通过矩阵的点积,可以将公式改写为,在m个特征,n个样本下:
y^i=Xβ\hat{y}_i=Xβy^i=

带入最小二乘法公式:

f=∑i=1n(yi−y^i)2=∑i=1n(yi−Xβ)2=∥yi−Xβ∥2=(yi−Xβ)T(yi−Xβ)\text{f} = \sum_{i=1}^{n} (y_i - \hat{y}_i)^2 = \sum_{i=1}^{n} (y_i - Xβ)^2 = \| {y_i} - Xβ \|_2 = (y_i - Xβ)^T(y_i - Xβ)f=i=1n(yiy^i)2=i=1n(yi)2=yi2=(yi)T(yi)

展开矩阵:

(yi−Xβ)T(yi−Xβ)=yiTyi−yiTXβ−XTβTyi+XTβTXβ(y_i - Xβ)^T(y_i - Xβ) = y_i^Ty_i-y_i^TXβ-X^Tβ^Ty_i+X^Tβ^TXβ(yi)T(yi)=yiTyiyiTXTβTyi+XTβT

由于 yiTXβy_i^TXβyiT 的转置矩阵就是 XTβTyiX^Tβ^Ty_iXTβTyi

=yiTyi−2XTβTyi+XTβTXβ= y_i^Ty_i-2X^Tβ^Ty_i+X^Tβ^TXβ=yiTyi2XTβTyi+XTβT

为了找到β最小值,先求导然后令导数为0

∂f∂β=(yiTyi−2XTβTyi+XTβTXβ)′=−2XTyi+2XTXβ=0\frac{\partial f}{\partial β} = (y_i^Ty_i-2X^Tβ^Ty_i+X^Tβ^TXβ)' = -2X^Ty_i+2X^TXβ = 0βf=(yiTyi2XTβTyi+XTβT)=2XTyi+2XT=0
=>
XTyi=XTXβX^Ty_i=X^TXβXTyi=XT

两边同时乘以XTXX^TXXTX逆矩阵,换句话说,XTXX^TXXTX是可逆矩阵:

β=(XTX)−1XTyiβ=(X^TX)^{-1}X^Ty_iβ=(XTX)1XTyi

小结

这其中用到的数学知识主要有:导数、矩阵等方面的知识

用MathJax语法写公式真的太费劲了!还不如在纸上手写

联系我

  • 联系我,做深入的交流

在这里插入图片描述


至此,本文结束
在下才疏学浅,有撒汤漏水的,请各位不吝赐教…

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

相关文章:

  • 在线教育领域的视频弹题功能如何打造高互动性在线课程
  • 【Tech Arch】Hadoop YARN 大数据集群的 “资源管家”
  • 全栈开发:从LAMP到云原生的技术革命
  • Kali Linux 发布重构版Vagrant镜像:通过命令行快速部署预配置DebOS虚拟机
  • Pandas中的SettingWithCopyWarning警告出现原因及解决方法
  • DbLens:告别手动Mock数据,右键一键智能生成数据库内容
  • httpclient与hertzclient在处理Host header时的差别
  • 【GPT入门】第53课 LlamaFactory微调效果与vllm部署效果不一致问题解决
  • open webui源码分析6-Function
  • FPGA学习笔记——简单的IIC读写EEPROM
  • FPGA高端项目:图像采集+Aurora 8B10B+UDP图传架构,基于GTH高速收发器的光口转网口,提供工程源码和技术支持
  • IntelliJ IDEA 常用快捷键笔记(Windows)
  • SRE系列(二) | 从可用性到 SLI/SLO
  • 【数据结构】B 树——高度近似可”独木成林“的榕树——详细解说与其 C 代码实现
  • MySQL编程开发(了解)
  • 08高级语言逻辑结构到汇编语言之逻辑结构转换 continue break 完结汇编按逻辑结构
  • Redis---事务
  • 51单片机-驱动步进电机模块教程
  • C#_组合优于继承的实际应用
  • Kafka Broker 核心原理全解析:存储、高可用与数据同步
  • 如何从根源上理解并解决前端的CORS跨域问题
  • 【PSINS工具箱】MATLAB例程,二维平面上的组合导航,EKF融合速度、位置和IMU数据,4维观测量
  • Unreal Engine ClassName Rule
  • Python 中 SQLAlchemy 和 MySQLdb 的关系
  • IKE 与 ISAKMP 核心笔记
  • 微信扫码登陆 —— 接收消息
  • 复合设计模式
  • 加密货币与区块链:六大刑事重灾区
  • 深入理解 Spring Boot Starter:简化依赖管理与自动配置的利器
  • 110、【OS】【Nuttx】【周边】效果呈现方案解析:查找最新构建件