【线性回归】最小二乘法推导及应用浅析

1. 概述

线性回归(Linear Regression)是机器学习和统计学中最基础和最广泛应用的模型,是一种对自变量和因变量之间关系进行建模的回归分析1。最小二乘法以误差的平方和作为目标函数,通过求解方程组来获取模型的参数,成为线性回归的普遍方法。

2. 原理步骤

例如有测量数据集 { ( x i , z i ) ∣ i = 1 , … , n } \{(x_i,z_i)|i=1,\dots,n\} {(xi,zi)i=1,,n},观察发现符合抛物线规律
z = θ 3 x 2 + θ 2 x + θ 1 \begin{align} z=\theta_3x^2+\theta_2x+\theta_1 \end{align} z=θ3x2+θ2x+θ1
需要确定系数 θ 3 , θ 2 , θ 1 \theta_3,\theta_2,\theta_1 θ3,θ2,θ1,你可以选三组数据代入公式求解,但那并不代表所有数据的分布,需要使用线性回归找到最合适的解。那就把所有点代入抛物线表达式得到方程组:
θ 3 x 1 2 + θ 2 x 1 + θ 1 = z 1 θ 3 x 2 2 + θ 2 x 2 + θ 1 = z 2 ⋮ θ 3 x n 2 + θ 2 x n + θ 1 = z n \begin{aligned} \theta_3x_{1}^{2}+\theta_2x_1+\theta_1&=z_1 \\ \\ \theta_3x_{2}^{2}+\theta_2x_2+\theta_1&=z_2 \\ \vdots& \\ \theta_3x_{n}^{2}+\theta_2x_{n}+\theta_1&=z_{n} \end{aligned} θ3x12+θ2x1+θ1θ3x22+θ2x2+θ1θ3xn2+θ2xn+θ1=z1=z2=zn
一般 n n n 远大于待求系数的个数,方程组无精确解,写成矩阵的形式,习惯上将高次的系数放后边:
[ 1 x 1 x 1 2 1 x 2 x 2 2 ⋮ ⋮ ⋮ 1 x n x n 2 ] [ θ 1 θ 2 θ 3 ] ≠ [ z 1 z 2 ⋮ z n ] \begin{align} \begin{bmatrix} 1 & x_1 & x_{1}^{2} \\ 1 & x_2 & x_{2}^{2} \\ \vdots & \vdots & \vdots \\ 1 & x_{n} & x_{n}^{2} \\ \end{bmatrix} \begin{bmatrix} \theta_1\\ \theta_2\\ \theta_3\\ \end{bmatrix} \ne \begin{bmatrix} z_1 \\ z_2\\ \vdots\\ z_{n} \end{bmatrix} \end{align} 111x1x2xnx12x22xn2 θ1θ2θ3 = z1z2zn
定义式(2)左边为估计值 Y Y Y

Y = [ y 1 y 2 ⋮ y n ] = [ 1 x 1 x 1 2 1 x 2 x 2 2 ⋮ ⋮ ⋮ 1 x n x n 2 ] [ θ 1 θ 2 θ 3 ] = A ⋅ Θ Y= \begin{bmatrix} y_1 \\ y_2 \\ \vdots \\ y_n \end{bmatrix}= \begin{bmatrix} 1 & x_1 & x_{1}^{2} \\ 1 & x_2 & x_{2}^{2} \\ \vdots & \vdots & \vdots \\ 1 & x_{n} & x_{n}^{2} \\ \end{bmatrix} \begin{bmatrix} \theta_1\\ \theta_2\\ \theta_3\\ \end{bmatrix}=A \sdot \Theta Y= y1y2yn = 111x1x2xnx12x22xn2 θ1θ2θ3 =AΘ
A A A 为测量自变量组成的矩阵,由回归对象的数学模型式(1)确定,可以记为将 n n n个式(1)按行依次堆满矩阵得到; Θ \Theta Θ 是待求系数向量。现在目标变成了找到一组 Θ \Theta Θ,使 ∣ ∣ Z − Y ∣ ∣ 2 2 ||Z-Y||_{2}^{2} ∣∣ZY22 (向量元素的平方和)最小 ,即:
m i n J = ( Z − A Θ ) T ( Z − A Θ ) \begin{align} \begin{matrix} min & J=(Z-A\Theta)^T(Z-A\Theta) \end{matrix} \end{align} minJ=(ZAΘ)T(ZAΘ)
可以使用之前介绍的牛顿拉夫逊法来求解,也可以用其它梯度下降法,然而这种形式的目标函数可以求出解的表达式,使用更方便,式(3)展开为:
J = ( Z T − Θ T A T ) ( Z − A Θ ) = Z T Z − Z T A Θ − Θ T A T Z + Θ T A T A Θ = Z T Z − 2 Z T A Θ + Θ T A T A Θ ∵ ( Θ T A T Z ) T = Z T ( Θ T A T ) T = Z T A Θ → Θ T A T Z = Z T A Θ \begin{align} J&=(Z^T-\Theta^TA^T)(Z-A\Theta) \nonumber\\ \nonumber\\ &=Z^TZ-Z^TA\Theta-\Theta^TA^TZ+\Theta^TA^TA\Theta \nonumber\\ \nonumber\\ &=Z^TZ-2Z^TA\Theta+\Theta^TA^TA\Theta \\ \nonumber\\ &\because (\Theta^TA^TZ)^T=Z^T(\Theta^TA^T)^T=Z^TA\Theta \to \Theta^TA^TZ=Z^TA\Theta \nonumber \end{align} J=(ZTΘTAT)(ZAΘ)=ZTZZTAΘΘTATZ+ΘTATAΘ=ZTZ2ZTAΘ+ΘTATAΘ(ΘTATZ)T=ZT(ΘTAT)T=ZTAΘΘTATZ=ZTAΘ
式(4)对 Θ \Theta Θ 求偏导并令其为零:
∂ J ∂ Θ = 0 − 2 ( Z T A ) T + ( Θ T A T A ) ˊ Θ + Θ T A T A ( Θ ) ˊ = − 2 ( Z T A ) T + A T A Θ + Θ T A T A = − 2 A T Z + 2 A T A Θ = 0 Θ = ( A T A ) − 1 A T Z \begin{align} \frac{\partial J}{\partial \Theta}&=0-2(Z^TA)^T+(\Theta^TA^TA\acute{)} \Theta +\Theta^TA^TA(\Theta \acute{)} \nonumber\\ \nonumber\\ &=-2(Z^T A)^T+A^T A\Theta+\Theta^T A^T A \nonumber\\ \nonumber\\ &=-2A^T Z+2A^T A\Theta \nonumber\\ \nonumber\\ &=0 \\ \nonumber\\ \Theta&=(A^TA)^{-1}A^TZ \end{align} ΘJΘ=02(ZTA)T+(ΘTATA)ˊΘ+ΘTATA(Θ)ˊ=2(ZTA)T+ATAΘ+ΘTATA=2ATZ+2ATAΘ=0=(ATA)1ATZ
式(6)就是经常见到的最小二乘法求解模型系数公式,只要获取足量的数据,矩阵 A A A与系统自变量有关,向量 Z Z Z与系统的应变量有关,直接一步就可以得到模型的参数了。

3. 实例测试

测试最小二乘法对函数 z = x 2 − 2 x + 1 z=x^2-2x+1 z=x22x+1 的拟合能力。


41组数据

401组数据

分别取41和401组数据时 [ a , b , c ] [a,b,c] [a,b,c] 分别为 [ 0.9817 , − 1.8774 , 1.0976 ] [0.9817,-1.8774,1.0976] [0.9817,1.8774,1.0976] [ 1.0128 , − 1.9979 , 1.0160 ] [1.0128,-1.9979,1.0160] [1.01281.99791.0160]

4. 总结

推导了最小二乘法的求解公式,在线性回归中,重要的是回归的数学模型如何建立。值得一提的一点,式(1)抛物线含有平方项,属于非线性多项式模型,但是在求解未知系数时,其实是在求解线性方程组(5),所以尽管模型是非线性,过程还是属于线性回归。若模型采用多层神经网络,则式(5)是非线性方程组,宜采用梯度下降法直接求式(3)极值,这时候就叫深度学习了!

5. 详细代码

TestLSM.m

%
% Auther:  sanfan66
%
clc
clear all
close all

X=[-2:0.01:2]';
Z0=TestFun(X);

n=length(X);%数据组数
rng(0,'v5uniform')%随机数种子
Z=Z0+randn(size(Z0));

nTheta=3;%3个待求系数
A=ones(n,nTheta);
A(:,2)=X;
A(:,3)=X.^2;
theta=inv(A'*A)*A'*Z;
Y=A*theta;

plot(X,Z0,'b',X,Z,'O',X,Y,'r')
legend('理论','测量','最小二乘')
xlim([-2 2]);
ylim([-4 12]);

function Z=TestFun(X)
    Z=X.*X-2*X+1;
end


  1. 邱锡鹏. 神经网络与深度学习. 2020:机械工业出版社. ↩︎

  • 24
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值