最小二乘法代数表示方法
假设多元线性方程有如下形式:
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=1∑m(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=1mxi2−m1(∑i=1mxi)2∑i=1myi(xi−xˉ)
b=1m∑i=1m(yi−wxi) b = \frac{1}{m}\sum^m_{i=1}(y_i-wx_i) b=m1i=1∑m(yi−wxi)
#最小二乘法的矩阵表示形式
设多元线性回归方程为:
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=∣∣y−Xw^T∣∣22=(y−Xw^T)T(y−Xw^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
∂∣∣y−Xw^T∣∣22
下方的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存在逆矩阵。