深度学习基础:2.最小二乘法

本文详细介绍了最小二乘法在多元线性回归中的应用,从简单线性回归的求解过程到矩阵表示形式,展示了如何通过求导找到最优解。通过实例演示了使用PyTorch实现最小二乘法的过程,并提到了范数计算的相关知识。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最小二乘法代数表示方法

假设多元线性方程有如下形式:
f(x)=w1x1+w2x2+...+wdxd+b f(x) = w_1x_1+w_2x_2+...+w_dx_d+b f(x)=w1x1+w2x2+...+wdxd+b
w=(w1,w2,...wd)w = (w_1,w_2,...w_d)w=(w1,w2,...wd)x=(x1,x2,...xd)x = (x_1,x_2,...x_d)x=(x1,x2,...xd),则上式可写为
f(x)=wTx+b f(x) = w^Tx+b f(x)=wTx+b
多元线性回归的最小二乘法的代数法表示较为复杂,此处先考虑简单线性回归的最小二乘法表示形式。在简单线性回归中,w只包含一个分量,x也只包含一个分量,我们令此时的xix_ixi就是对应的自变量的取值,此时求解过程如下

优化目标可写为
SSE=∑i=1m(f(xi)−yi)2=E(w,b) SSE = \sum^m_{i=1}(f(x_i)-y_i)^2 = E_(w,b) SSE=i=1m(f(xi)yi)2=E(w,b)
通过偏导为0求得最终结果的最小二乘法求解过程为:
KaTeX parse error: No such environment: align at position 9: \begin{̲a̲l̲i̲g̲n̲}̲ \frac{\partial…

KaTeX parse error: No such environment: align at position 9: \begin{̲a̲l̲i̲g̲n̲}̲ \frac{\partial…

求得:
w=∑i=1myi(xi−xˉ)∑i=1mxi2−1m(∑i=1mxi)2 w = \frac{\sum^m_{i=1}y_i(x_i-\bar{x}) }{\sum^m_{i=1}x^2_i-\frac{1}{m}(\sum^m_{i=1}x_i)^2 } w=i=1mxi2m1(i=1mxi)2i=1myi(xixˉ)

b=1m∑i=1m(yi−wxi) b = \frac{1}{m}\sum^m_{i=1}(y_i-wx_i) b=m1i=1m(yiwxi)

#最小二乘法的矩阵表示形式

设多元线性回归方程为:
f(x)=w1x1+w2x2+...+wdxd+b f(x) = w_1x_1+w_2x_2+...+w_dx_d+b f(x)=w1x1+w2x2+...+wdxd+b

w^=(w1,w2,...,wd,b) \hat w = (w_1,w_2,...,w_d,b) w^=(w1,w2,...,wd,b)

x^=(x1,x2,...,xd,1) \hat x = (x_1,x_2,...,x_d,1) x^=(x1,x2,...,xd,1)


f(x)=w^∗x^T f(x) = \hat w * \hat x^T f(x)=w^x^T
有多个y值,则所有x值可以用矩阵X进行表示:
X=[x11x12...x1d1x21x22...x2d1............1xm1xm2...xmd1] X = \left [\begin{array}{cccc} x_{11} &x_{12} &... &x_{1d} &1 \\ x_{21} &x_{22} &... &x_{2d} &1 \\ ... &... &... &... &1 \\ x_{m1} &x_{m2} &... &x_{md} &1 \\ \end{array}\right] X=x11x21...xm1x12x22...xm2............x1dx2d...xmd1111
y也可用m行1列的矩阵表示:
y=[y1y2...ym] y = \left [\begin{array}{cccc} y_1 \\ y_2 \\ . \\ . \\ . \\ y_m \\ \end{array}\right] y=y1y2...ym
此时,SSE表示为:
SSE=∣∣y−Xw^T∣∣22=(y−Xw^T)T(y−Xw^T)=E(w^) SSE = ||y - X\hat w^T||_2^2 = (y - X\hat w^T)^T(y - X\hat w^T) = E(\hat w) SSE=yXw^T22=(yXw^T)T(yXw^T)=E(w^)
根据最小二乘法的求解过程,令E(w^)E(\hat w)E(w^)w^\hat ww^求导方程取值为0,有
KaTeX parse error: No such environment: equation at position 879: …数,有如下规则: \begin{̲e̲q̲u̲a̲t̲i̲o̲n̲}̲ \\\frac{\parti…
简单记忆矩阵的求导,自身转置对自身求导=其它项的转置;

其中:
∂∣∣y−Xw^T∣∣22 \partial{||\boldsymbol{y} - \boldsymbol{X\hat w^T}||_2}^2 yXw^T22
下方的2表示L2范式,即里面的内容相乘之后开根号,右上平方之后,消除根号。

进一步可得
XTXw^T=XTy X^TX\hat w^T = X^Ty XTXw^T=XTy
要使得此式有解,等价于XTXX^TXXTX(也被称为矩阵的交叉乘积crossprod存在逆矩阵,若存在,则可解出)
w^T=(XTX)−1XTy \hat w ^T = (X^TX)^{-1}X^Ty w^T=(XTX)1XTy

最小二乘法的编程实现

例子:

X=A=[1131] X = A = \left [\begin{array}{cccc} 1 &1 \\ 3 &1 \\ \end{array}\right] X=A=[1311]

y=B=[24] y = B = \left [\begin{array}{cccc} 2 \\ 4 \\ \end{array}\right] y=B=[24]

w^T=XT=[ab] \hat w ^T = X^T = \left [\begin{array}{cccc} a \\ b \\ \end{array}\right] w^T=XT=[ab]

手动实现

X = A
X
tensor([[1., 1.],
        [3., 1.]])
y = B
y
tensor([[2.],
        [4.]])
X.t()
tensor([[1., 3.],
        [1., 1.]])
w = torch.mm(torch.mm(torch.inverse(torch.mm(X.t(),X)),X.t()),y)

这里直接套用上面推导出来的公式

w
tensor([[1.0000],
        [1.0000]])

调用函数求解

torch.lstsq(y, X)
torch.return_types.lstsq(
solution=tensor([[1.0000],
        [1.0000]]),
QR=tensor([[-3.1623, -1.2649],
        [ 0.7208, -0.6325]]))

对于lstsq函数来说,第一个参数是因变量张量,第二个参数是自变量张量,并且同时返回结果还包括QR矩阵分解的结果。

补充知识点:范数的计算

求解L2范数:

# 默认情况,求解L2范数,个元素的平方和开平方
torch.linalg.norm(t)

求解L1范数:

# 输入参数,求解L1范数,个元素的绝对值之和
torch.linalg.norm(t, 1)

总结

最小二乘法计算快速,但条件苛刻,需满足X存在逆矩阵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zstar-_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值