最小二乘法推导及求解

最小二乘法推导及求解本文主要简述了最小二乘法的定义 推导和求解 并通过 python 代码的方式展示了最小二乘法的矩阵求解方式

大家好,欢迎来到IT知识分享网。

一、最小二乘法

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

基本原理:
    最小二乘法的基本原理是,如果我们有一组数据点 ( 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 \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的值

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

线性回归模型: 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

此处:

求解 θ \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(θ)化简

∂ ( 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的值。

为了找到 θ \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.]] 

计算 ( 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. 0. -0.]] 

计算 ( 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.]] 

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

 

四、最小二乘法局限性

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

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

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

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

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/128211.html

(0)
上一篇 2025-09-02 14:45
下一篇 2025-09-02 15:10

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信