最小二乘法推导及求解

一、最小二乘法

最小二乘法是一种数学优化技术,它通过最小化误差的平方和来寻找数据的最佳函数匹配。这种方法常用于数据拟合,其中我们尝试找到一个函数,尽可能地接近一组给定的数据点。

基本原理:
    最小二乘法的基本原理是,如果我们有一组数据点 ( x 1 , y 1 ) , ( x 2 , y 2 , . . . , x n , y n ) (x_1,y_1),(x_2,y_2,...,x_n,y_n) (x1,y1),(x2,y2,...,xn,yn),我们想要找到一个函数 y = f ( x ) y=f(x) y=f(x),使得这个函数在所有数据点上的预测值与实际值之间的差异(即残差)的平方和最小。

如果我们考虑的是线性函数 y = a x + b y=ax+b y=ax+b,那么最小二乘法的目标就是找到系数 a a a b b b ,使得所有误差平方和最小:
M = ∑ i = 1 m ( y i − y ) 2 = ∑ i = 1 m [ y i − ( a x i + b ) ] 2 M=\sum_{i=1}^m(y_i-y)^2=\sum_{i=1}^m[y_i-(ax_i+b)]^2 M=i=1m(yiy)2=i=1m[yi(axi+b)]2

此处把 M M M看成与自变量 a a a b b b的因变量,那么问题就可以归结为求函数 M = M ( a , b ) M=M(a,b) M=M(a,b)在哪些点处取得最小值,即通过求方程组
{ M a ( a , b ) = 0 M b ( a , b ) = 0 (1) \begin{cases} M_a(a,b)=0 \\ M_b(a,b)=0\\ \tag{1} \end{cases} {Ma(a,b)=0Mb(a,b)=0(1)

的解来解决,即令
{ ∂ M ∂ a = − 2 ∑ i = 0 m x i [ y i − ( a x i + b ) ] = 0 , ∂ M ∂ b = − 2 ∑ i = 0 m [ y i − ( a x i + b ) ] = 0 (2) \begin{cases} \frac{\partial M}{\partial a}= -2 \sum_{i=0}^m x_i[y_i-(ax_i+b)] =0 ,\\ \frac{\partial M}{\partial b}= -2 \sum_{i=0}^m [y_i-(ax_i+b)] =0 \\ \tag{2} \end{cases} {aM=2i=0mxi[yi(axi+b)]=0,bM=2i=0m[yi(axi+b)]=0(2)

∂ M ∂ a \frac{\partial M}{\partial a} aM 表示对 a a a进行求导, ∂ M ∂ b \frac{\partial M}{\partial b} bM表示对 b b b进行求导,此处是一个复合函数求导,根据链式求导法则获得

解以上线性方程组,得到 a a a的值, b b b的值

 
如果一个结果受 n n n个因素影响,则我们要求解的方程就变成:
y = a 1 x 1 + a 2 x 2 + ⋯ + a n x n + b y=a_1 x_1 +a_2x_2+\cdots+a_n x_n+b y=a1x1+a2x2++anxn+b
它在 n n n维坐标系下的图形是一个"超平面"
一个结果受多个因素影响的情形,在人工智能领域非常常见。
 

二、最小二乘法求解及推导

线性回归模型: h θ ( x ) = θ x 1 + θ x 2 + ⋯ + θ x n + θ 0 h\theta(x)=\theta x_1+\theta x_2+\cdots+\theta x_n+\theta0 hθ(x)=θx1+θx2++θxn+θ0

预测值: h θ ( X ) = θ 1 X + θ 0 h\theta(X)=\theta_1X+\theta0 hθ(X)=θ1X+θ0

其实就是求出参数 θ \theta θ的值

理论参数 θ = ( X T X ) − 1 X T Y \theta = (X^T X)^{-1} X^TY θ=(XTX)1XTY

为了衡量最小二乘的好坏,引入模型代价函数(基于均方差定义)

J ( θ ) = 1 2 m ∑ i = 0 m [ h θ ( x i ) − y i ] 2 J(\theta)=\frac{1}{2m}\sum_{i=0}^m [h\theta(x_i)-y_i]^2 J(θ)=2m1i=0m[hθxiyi]2

直线方程: h θ ( x ) = θ 0 + θ 1 x h\theta(x)=\theta0+\theta_1x hθ(x)=θ0+θ1x

此处:

样本数:m;
i i i个样本的特征: x i x_i xi
i i i个样本的真实值: y i y_i yi
i i i个样本的预测值: h θ ( x ) h\theta(x) hθ(x)

求解 θ \theta θ的方式可以分为以下几种:
①基于迭代的梯度下降算法
②基于求导的数学方法

此处我们简述基于矩阵微分,推导出来的求解公式。

推导过程

此处 θ 、 X 、 Y \theta 、X、Y θXY是整体的,是矩阵,进行矩阵的加、减、乘、求导

∂ ∂ θ J ( θ ) = 0 ⟹ ∂ ( Y − X ∗ θ ) ∂ θ = 0 ⟹ θ = ( X T X ) − 1 X T Y \frac{\partial }{\partial \theta} J(\theta)=0\Longrightarrow \frac{\partial(Y-X*\theta) }{\partial \theta}=0 \Longrightarrow \theta=(X^T X)^{-1} X^TY θJ(θ)=0θ(YXθ)=0θ=(XTX)1XTY

未知数: θ \theta θ;已知数: X 、 Y X、Y XY

代价函数 J ( θ ) J(\theta) J(θ)化简

此处用到两个矩阵转置公式
( A + B ) T = A T + B T (A+B)^T=A^T+B^T (A+B)T=AT+BT
( A B ) T = B T A T (AB)^T=B^TA^T (AB)T=BTAT

∂ ( Y − X θ ) T ( Y − X θ ) ∂ θ \frac{\partial(Y-X\theta)^T (Y-X\theta) }{\partial \theta} θ(Y)T(Y)
= ∂ ( Y T − θ T X T ) ( Y − X θ ) ∂ θ =\frac{\partial(Y^T-\theta^TX^T)(Y-X\theta) }{\partial \theta} =θ(YTθTXT)(Y)
= ∂ ( Y T ( Y − X θ ) ) − ( θ T X T ) ( Y − X θ ) ∂ θ =\frac{\partial(Y^T(Y-X\theta))-(\theta^TX^T)(Y- X\theta) }{\partial \theta} =θ(YT(Y))(θTXT)(Y)
= ∂ ( Y T Y − Y T X θ − θ T X T Y + θ T X T X θ ) ∂ θ =\frac{\partial(Y^TY-Y^TX\theta-\theta^TX^TY+\theta^TX^TX\theta )}{\partial \theta} =θ(YTYYTθTXTY+θTXT)
= ∂ Y T Y ∂ θ − ∂ Y T X θ ∂ θ − ∂ θ T X T Y ∂ θ + ∂ θ T X T X θ ∂ θ =\frac{\partial Y^T Y}{\partial \theta}-\frac{\partial Y^T X\theta}{\partial \theta}-\frac{\partial \theta^TX^T Y}{\partial \theta}+\frac{\partial \theta^TX^TX\theta }{\partial \theta} =θYTYθYTθθTXTY+θθTXT

此处用到矩阵求导公式:

公式1:常数矩阵求导等于0

公式2: d A X d X = A T \frac{d AX}{d X}=A^T dXdAX=AT

公式3: d X T A d X = A \frac{d X^TA}{d X}=A dXdXTA=A

公式4: d X T A X d X = ( A + A T ) X \frac{d X^TAX}{d X}=(A+A^T)X dXdXTAX=(A+AT)X

此处:未知量:X;    常数矩阵:A

对上式进行求导可得

∂ Y T Y ∂ θ \frac{\partial Y^T Y}{\partial \theta} θYTY=0

∂ Y T X θ ∂ θ \frac{\partial Y^T X\theta}{\partial \theta} θYT 对应公式2,此处 A = Y T X ⟶ ∂ Y T X θ ∂ θ = ( Y T X ) T = X T Y A=Y^TX \longrightarrow \frac{\partial Y^T X\theta}{\partial \theta}=(Y^TX)^T=X^TY A=YTXθYT=(YTX)T=XTY

∂ θ T X T Y ∂ θ \frac{\partial \theta^TX^T Y}{\partial \theta} θθTXTY对应公式3,此处 A = X T Y ⟶ ∂ θ T X T Y ∂ θ = X T Y A=X^TY \longrightarrow \frac{\partial \theta^TX^T Y}{\partial \theta}=X^TY A=XTYθθTXTY=XTY

∂ θ T X T X θ ∂ θ \frac{\partial \theta^TX^TX\theta }{\partial \theta} θθTXT对应公式4,此处 A = X T X ⟶ ∂ θ T X T X θ ∂ θ = ( X T X + ( X T X ) T ) θ = 2 X T X θ A=X^TX \longrightarrow \frac{\partial \theta^TX^TX\theta }{\partial \theta}=(X^TX+(X^TX)^T)\theta =2X^TX\theta A=XTXθθTXT=(XTX+(XTX)T)θ=2XT

求关于 θ \theta θ的矩阵方程

同项相加和为0: 0 − X T − X T Y + 2 X T X θ = 0 0-X^T-X^TY+2X^TX\theta =0 0XTXTY+2XT=0

整理: − 2 X T Y + 2 X T X θ = 0 -2X^TY+2X^TX\theta =0 2XTY+2XT=0

移项: X T X θ = X T Y X^TX\theta = X^TY XT=XTY

化简: ( X T X ) − 1 X T X θ = ( X T X ) − 1 X T Y (X^TX)^{-1}X^TX\theta=(X^TX)^{-1}X^TY XTX)1XT=XTX)1XTY

解出 θ \theta θ θ = ( X T X ) − 1 X T Y \theta=(X^TX)^{-1}X^TY θ=(XTX)1XTY
 

三、最小二乘法求解举例

假设我们有一组数据点 ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) (x_1,y_1),(x_2,y_2),...,(x_n,y_n) (x1,y1),(x2,y2),...,(xn,yn),我们想要找到一个线性模型 y = a x + b y=ax+b y=ax+b来拟合这些数据点。我们可以将这个问题表达为一个矩阵方程:
X × θ = Y X\times \theta = Y X×θ=Y
其中:

  • X X X 是一个 n × 2 n \times 2 n×2 的矩阵,,第一列是所有 x i x_i xi的值,第二列是常数 1。
  • θ \theta θ是一个 2 × 1 2×1 2×1 的列向量,包含未知数 a a a b b b
  • Y Y Y是一个 n × 1 n \times 1 n×1的列向量,包含所有 y i y_i yi的值。

具体来说,矩阵和向量可以表示为:
X = [ x 1 1 x 2 1 ⋮ ⋮ x n 1 ] , θ = [ a b ] , Y = [ y 1 y 2 ⋮ y n ] X = \left[ \begin{matrix} {x_1} & {1} \\ {x_2} & {1} \\ \vdots &\vdots \\ {x_n} & {1} \end{matrix} \right], \theta = \left[ \begin{matrix} {a} \\ {b} \end{matrix} \right], Y = \left[ \begin{matrix} {y_1} \\ {y_2} \\ \vdots \\ {y_n} \end{matrix} \right] X= x1x2xn111 ,θ=[ab],Y= y1y2yn

为了找到 θ \theta θ,我们可以使用最小二乘法的正规方程:

θ = ( X T X ) − 1 X T Y \theta=(X^TX)^{-1}X^TY θ=(XTX)1XTY

下面是一个具体的示例:

假设我们有以下三个数据点:

( 1 , 2 ) , ( 2 , 3 ) , ( 3 , 5 ) (1,2),(2,3),(3,5) (1,2),(2,3),(3,5)

我们想要找到通过这些点的直线 y = a x + b y=ax+b y=ax+b

首先,我们构建矩阵 X X X和向量 Y Y Y

X = [ 1 1 2 1 3 1 ] , Y = [ 2 3 5 ] X = \left[ \begin{matrix} {1} & {1} \\ {2} & {1} \\ {3} & {1} \end{matrix} \right], Y = \left[ \begin{matrix} {2} \\ {3} \\ {5} \end{matrix} \right] X= 123111 ,Y= 235

然后我们计算 X T × X X^T\times X XT×X X T × Y X^T \times Y XT×Y

X T = [ 1 2 3 1 1 1 ] , X T X = [ 14 6 6 3 ] , X T Y = [ 23 10 ] X^T = \left[ \begin{matrix} {1} & {2} & {3} \\ {1} & {1} & {1} \\ \end{matrix} \right], X^TX = \left[ \begin{matrix} {14} &{6} \\ {6} & {3} \end{matrix} \right], X^TY = \left[ \begin{matrix} {23} \\ {10} \end{matrix} \right] XT=[112131],XTX=[14663],XTY=[2310]

接下来,我们计算 ( X T × X ) − 1 (X^T \times X)^{-1} (XT×X)1

( X T X ) − 1 = [ 0.5 − 1 − 1 2.33 ] (X^TX)^{-1} = \left[ \begin{matrix} {0.5} &{-1} \\ {-1} & {2.33} \end{matrix} \right] (XTX)1=[0.5112.33]

最后,我们计算 θ \theta θ
θ = [ 0.5 − 1 − 1 2.33 ] × [ 23 10 ] = [ 1.5 0.33 ] \theta = \left[ \begin{matrix} {0.5} &{-1} \\ {-1} & {2.33} \end{matrix} \right] \times \left[ \begin{matrix} {23} \\ {10} \end{matrix} \right] = \left[ \begin{matrix} {1.5} \\ {0.33} \end{matrix} \right] θ=[0.5112.33]×[2310]=[1.50.33]

所以,最佳拟合直线是 y = 1.5 x + 0.33 y=1.5x+0.33 y=1.5x+0.33

numpy实现以上计算

计算 X T × X X^T\times X XT×X

import numpy as np

# 创建X值的二维数组
X = np.array([[1, 1], [2, 1], [3, 1]])

# 创建Y值的二维数组
Y = np.array([[2], [3], [5]])

# 计算X的转置与X的乘积
dot = np.dot(X.T, X)

# [[14  6]
#  [ 6  3]]

计算 ( X T × X ) − 1 (X^T \times X)^{-1} (XT×X)1

# 计算X的转置与X的乘积的逆矩阵
inv = np.linalg.inv(dot)

# [[ 0.5        -1.        ]
#  [-1.          2.33333333]]

计算 ( X T × X ) − 1 × X T (X^T \times X)^{-1} \times X^T (XT×X)1×XT

# 计算X的转置与X的乘积的逆矩阵,然后乘以X的转置
transfer = np.dot(inv, X.T)

# [[-0.5         0.          0.5       ]
#  [ 1.33333333  0.33333333 -0.66666667]]

计算 ( X T × X ) − 1 × X T × Y (X^T \times X)^{-1} \times X^T \times Y (XT×X)1×XT×Y

# 计算transfer与Y的乘积
result = np.dot(transfer, Y)

# [[1.5       ]
#  [0.33333333]]

函数图像如下:
线性回归函数
图中红色的数据点为已知的数据点: ( 1 , 2 ) , ( 2 , 3 ) , ( 3 , 5 ) (1,2),(2,3),(3,5) (1,2),(2,3),(3,5)

 

四、最小二乘法局限性

 
1、最小二乘法需要计算 X T X X^TX XTX的逆矩阵,有可能它的逆矩阵不存在,这样就没有办法直接用最小二乘法了,此时梯度下降法仍然可以使用。当然,我们可以通过对样本数据进行整理,去掉冗余特征。让 X T X X^TX XTX 的行列式不为0,然后继续使用最小二乘法。(行列式相关计算可以参考我另一篇博文,Numpy学习笔记(二)

2、当样本特征 非常的大的时候,计算 X T X X^TX XTX的逆矩阵是一个非常耗时的工作( n ∗ n n*n nn的矩阵求逆),甚至不可行。此时以梯度下降为代表的迭代法仍然可以使用。那这个 n n n到底多大就不适合最小二乘法呢?如果你没有很多的分布式大数据计算资源,建议超过10000个特征就用迭代法吧。或者通过主成分分析降低特征的维度后再用最小二乘法。

3、如果拟合函数不是线性的,这时无法使用最小二乘法,需要通过一些技巧转化为线性才能使用,此时梯度下降仍然可以用。

4、数据应该是准确和可靠的,因为最小二乘法对异常值和错误数据非常敏感。

5、使用最小二乘法之前,需要对模型做出一些基本假设,如线性关系、误差项的独立性、常数方差等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值