0
点赞
收藏
分享

微信扫一扫

最小二乘法的矩阵表达

b91bff6ffdb5 2022-02-04 阅读 94

1 前期准备

为了方便表述,我们先做一些很简单的定义:

假设有一多项式函数:
f ( x 1 , x 2 , ⋯   , x m ) = ∑ i = 1 m a i x i f( x_1,x_2,\cdots ,x_m) =\sum_{i=1}^m{a_ix_i} f(x1,x2,,xm)=i=1maixi
我们将函数中的自变量都提取出来组成一个列向量 x x x
x = [ x 1 , x 2 , ⋯   , x m ] T x=[x_1,x_2,\cdots,x_m]^T x=[x1,x2,,xm]T
则称 x x x为一个向量变元

[ 1 , 2 ] T [1,2]^T [1,2]T就是 f ( x 1 , x 2 ) = x 1 + 2 x 2 f(x_1,x_2)=x_1+2x_2 f(x1,x2)=x1+2x2向量变元

此时,如果我们按照向量变元内部的变量排列顺序,依次在每个变量位置填上该变量对应的偏导函数,则就构成了对于函数 f ( x 1 , x 2 , ⋯   , x m ) f( x_1,x_2,\cdots ,x_m) f(x1,x2,,xm)进行向量变元 x x x的向量求导的结果,即:
∂ f ( x 1 , x 2 , ⋯   , x m ) ∂ x = [ ∂ f ( x 1 , x 2 , ⋯   , x m ) ∂ x 1 , ∂ f ( x 1 , x 2 , ⋯   , x m ) ∂ x 2 , ⋯   , ∂ f ( x 1 , x 2 , ⋯   , x m ) ∂ x m ] T \frac{\partial f(x_1,x_2,\cdots ,x_m)}{\partial x}=[ \frac{\partial f(x_1,x_2,\cdots ,x_m)}{\partial x_1},\frac{\partial f(x_1,x_2,\cdots ,x_m)}{\partial x_2},\cdots ,\frac{\partial f(x_1,x_2,\cdots ,x_m)}{\partial x_m} ] ^T xf(x1,x2,,xm)=[x1f(x1,x2,,xm),x2f(x1,x2,,xm),,xmf(x1,x2,,xm)]T
据此,我们对向量求导做出定义:

f ( x ) f(x) f(x)是一个关于 x x x的函数,其中 x x x是向量变元,并且 x = [ x 1 , x 2 , . . . , x n ] T x = [x_1, x_2,...,x_n]^T x=[x1,x2,...,xn]T


∂ f ∂ x = [ ∂ f ∂ x 1 , ∂ f ∂ x 2 , . . . , ∂ f ∂ x n ] T \frac{\partial f}{\partial x} = [\frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, ..., \frac{\partial f}{\partial x_n}]^T xf=[x1f,x2f,...,xnf]T
而该表达式也被称为向量求导的梯度向量形式。
∇ x f ( x ) = ∂ f ∂ x = [ ∂ f ∂ x 1 , ∂ f ∂ x 2 , . . . , ∂ f ∂ x n ] T \nabla _xf(x) = \frac{\partial f}{\partial x} = [\frac{\partial f}{\partial x_1}, \frac{\partial f}{\partial x_2}, ..., \frac{\partial f}{\partial x_n}]^T xf(x)=xf=[x1f,x2f,...,xnf]T
接下来,我们去证明几个等式,这些等式都将再最小二乘法的矩阵形式推导中用到。

2 最小二乘法矩阵形式推导过程

假设有一多元线性方程组:
f ( x ) = w 1 x 1 + w 2 x 2 + . . . + w d x d + b f(x) = w_1x_1+w_2x_2+...+w_dx_d+b f(x)=w1x1+w2x2+...+wdxd+b
w = [ w 1 , w 2 , . . . w d ] T w = [w_1,w_2,...w_d]^T w=[w1,w2,...wd]T x = [ x 1 , x 2 , . . . x d ] T x = [x_1,x_2,...x_d]^T x=[x1,x2,...xd]T,则上式可写为:
f ( x ) = w T x + b f(x) = w^Tx+b f(x)=wTx+b
但是式(13)还不够简洁,我们可以令:
w ^ = [ w 1 , w 2 , . . . , w d , b ] T x ^ = [ x 1 , x 2 , . . . , x d , 1 ] T \hat w = [w_1,w_2,...,w_d,b]^T\\ \hat x = [x_1,x_2,...,x_d,1]^T w^=[w1,w2,...,wd,b]Tx^=[x1,x2,...,xd,1]T
假设现在总共有 m m m条观测值( m > d m>d m>d), x ( i ) = [ x 1 ( i ) , x 2 ( i ) , . . . , x d ( i ) ] x^{(i)} = [x_1^{(i)}, x_2^{(i)},...,x_d^{(i)}] x(i)=[x1(i),x2(i),...,xd(i)],则带入 f ( x ) f(x) f(x)中可构成 m m m个方程:
$$
\left [\begin{array}{cccc}
w_1x_1{(1)}+w_2x_2{(1)}+…+w_dx_d^{(1)}+b \
w_1x_1{(2)}+w_2x_2{(2)}+…+w_dx_d^{(2)}+b \
. \
. \
. \
w_1x_1{(m)}+w_2x_2{(m)}+…+w_dx_d^{(m)}+b \
\end{array}\right]

\left [\begin{array}{cccc}
\hat y_1 \
\hat y_2 \
. \
. \
. \
\hat y_m \
\end{array}\right]
再 令 : 再令:
\hat X = \left [\begin{array}{cccc}
x_1^{(1)} &x_2^{(1)} &… &x_d^{(1)} &1 \
x_1^{(2)} &x_2^{(2)} &… &x_d^{(2)} &1 \
… &… &… &… &1 \
x_1^{(m)} &x_2^{(m)} &… &x_d^{(m)} &1 \
\end{array}\right]\
y=[y_1,y_2,\cdots,y_m]^T\
\hat y=[\hat y_1,\hat y_2,\cdots,\hat y_m]^T
所 以 方 程 组 可 写 作 : 所以方程组可写作:
\hat X \cdot \hat w = \hat y
该 线 性 模 型 也 可 写 作 : 该线性模型也可写作: 线
f(\hat x) = \hat w^T \cdot \hat x
KaTeX parse error: Can't use function '$' in math mode at position 13: 我们可建立使误差平方和$̲SSE$最小的优化模型:
\min S(\hat w) = ||y - X\hat w||_2^2 = (y - X\hat w)^T(y - X\hat w)
$$
上式中, ∣ ∣ y − X w ^ T ∣ ∣ 2 ||y - X\hat w^T||_2 yXw^T2为向量的2-范数的计算表达式。向量的2-范数计算过程为各分量求平方和再进行开平方。例如 a = [ 1 , − 1 , ] a=[1, -1,] a=[1,1,],则 ∣ ∣ a ∣ ∣ 2 = 1 2 + ( − 1 ) 2 = 2 ||a||_2= \sqrt{1^2+(-1)^2}=\sqrt{2} a2=12+(1)2 =2

我们只需要求得偏导数的零点,即可得到最优解,即最优的 w ^ \hat w w^值,即拟合的参数,即可得拟合的多元函数表达式

在此之前,需要补充两点矩阵转置的运算规则:
( A − B ) T = A T − B T ( A B ) T = B T A T (A-B)^T=A^T-B^T\\ (AB)^T=B^TA^T (AB)T=ATBT(AB)T=BTAT
S ( w ^ ) S(\hat w) S(w^)求导并令其为0即可:
S ( w ^ ) ∂ w ^ = ∂ ∣ ∣ y − X w ^ ∣ ∣ 2 2 ∂ w ^ = ∂ ( y − X w ^ ) T ( y − X w ^ ) ∂ w ^ = ∂ ( y T − w ^ T X T ) ( y − X w ^ ) ∂ w ^ = ∂ ( y T y − w ^ T X T y − y T X w ^ + w ^ T X T X w ^ ) ∂ w ^ = 0 − X T y − X T y + X T X w ^ + ( X T X ) T w ^ = 0 − X T y − X T y + 2 X T X w ^ = 2 ( X T X w ^ − X T y ) = 0 \begin{aligned} \frac{S(\hat w)}{\partial{\boldsymbol{\hat w}}} &= \frac{\partial{||\boldsymbol{y} - \boldsymbol{X\hat w}||_2}^2}{\partial{\boldsymbol{\hat w}}} \\ &= \frac{\partial(\boldsymbol{y} - \boldsymbol{X\hat w})^T(\boldsymbol{y} - \boldsymbol{X\hat w})}{\partial{\boldsymbol{\hat w}}} \\ & =\frac{\partial(\boldsymbol{y}^T - \boldsymbol{\hat w^T X^T})(\boldsymbol{y} - \boldsymbol{X\hat w})}{\partial{\boldsymbol{\hat w}}}\\ &=\frac{\partial(\boldsymbol{y}^T\boldsymbol{y} - \boldsymbol{\hat w^T X^Ty}-\boldsymbol{y}^T\boldsymbol{X \hat w} +\boldsymbol{\hat w^TX^T}\boldsymbol{X\hat w})}{\partial{\boldsymbol{\hat w}}}\\ & = 0 - \boldsymbol{X^Ty} - \boldsymbol{X^Ty}+X^TX\hat w+(X^TX)^T\hat w \\ &= 0 - \boldsymbol{X^Ty} - \boldsymbol{X^Ty} + 2\boldsymbol{X^TX\hat w}\\ &= 2(\boldsymbol{X^TX\hat w} - \boldsymbol{X^Ty}) = 0 \end{aligned} w^S(w^)=w^yXw^22=w^(yXw^)T(yXw^)=w^(yTw^TXT)(yXw^)=w^(yTyw^TXTyyTXw^+w^TXTXw^)=0XTyXTy+XTXw^+(XTX)Tw^=0XTyXTy+2XTXw^=2(XTXw^XTy)=0
即:
X T X w ^ = X T y X^TX\hat w = X^Ty XTXw^=XTy
X T X X^TX XTX存在逆矩阵,则:
w ^ = ( X T X ) − 1 X T y \hat w = (X^TX)^{-1}X^Ty w^=(XTX)1XTy
这样我们就得到了拟合的 w ^ \hat w w^,至此最小二乘法的推导结束!

3 代码验证

假如有这么一组数据:

x x x y y y
12
34

我们要利用最小二乘法得到它的一次线性拟合函数,过程如下:

我们可以知道:
X = [ 1 1 3 1 ] y = [ 2 4 ] X = \left [\begin{array}{cccc} 1 &1 \\ 3 &1 \\ \end{array}\right]\\ y = \left [\begin{array}{cccc} 2 \\ 4 \\ \end{array}\right] \\ X=[1311]y=[24]
需要拟合的参数为:
$$
\hat w = \left [\begin{array}{cccc}

w \
b \
\end{array}\right]
则 : 则:
\begin{aligned}
\hat w &= (XTX){-1}X^Ty \
&= (\left [\begin{array}{cccc}
1 &1 \
3 &1 \
\end{array}\right]^{T}
\left [\begin{array}{cccc}
1 &1 \
3 &1 \
\end{array}\right])^{-1}
\left [\begin{array}{cccc}
1 &1 \
3 &1 \
\end{array}\right]^{T}
\left [\begin{array}{cccc}
2 \
4 \
\end{array}\right]
\
&=
\left [\begin{array}{cccc}
1 \
1 \
\end{array}\right]
\end{aligned}
即 拟 合 出 来 的 函 数 表 达 式 为 : 即拟合出来的函数表达式为:
y=x+1
$$
Python代码实现:

import numpy as np # 导入numpy库用于相关计算
X = np.array([[1, 1], [3, 1]]) # 矩阵X
y = np.array([2, 4]).reshape(2, 1) # 观察值
result=np.linalg.inv(X.T.dot(X)).dot(X.T).dot(y) # 相关矩阵运算
# 得到的结果中,最后一个值为b,其余从上到下分别为x1的系数,x2的系数......
print("拟合的参数为:",result)
举报

相关推荐

0 条评论