《最小二乘法》


最小二乘法(Least Square,LS)


思想

  • 最小二乘法目标:残差(观测点和估计点的差值)的平方和最小

  • 用于在线性回归模型中估计未知参数,非线性需要迭代的方法

  • 方程的数目要多于未知的参数数目

推导

​ 变量y与x可控变量x1 x2 …xt之间关系:
y = β 1 x + β 2 x + . . . + β t x + ε y=β_1x+β_2x+...+β_tx+ε y=β1x+β2x+...+βtx+ε
​ 转成矩阵格式

V = A x − B V=Ax-B V=AxB

​ 式中,
KaTeX parse error: Undefined control sequence: \matrix at position 11: A=\left[ \̲m̲a̲t̲r̲i̲x̲{ β_1^1 & β_2…

KaTeX parse error: Undefined control sequence: \matrix at position 11: B=\left[ \̲m̲a̲t̲r̲i̲x̲{ y^1-ε^1\\ …

​ 转化成最小二乘形式
m i n ∣ ∣ V ∣ ∣ min||V|| minV
​ 求欧几里得空间的2范数作为距离
∣ ∣ V ∣ ∣ 2 2 = ∣ ∣ A x − B ∣ ∣ 2 2 = ( A x − B ) T ( A x − B ) = x T A T A x − B T A x − x T A T B + B T B ||V||_2^2= ||Ax-B||_2^2\\ =(Ax-B)^T(Ax-B)\\ =x^TA^TAx-B^TAx-x^TA^TB+B^TB V22=AxB22=(AxB)T(AxB)=xTATAxBTAxxTATB+BTB
​ 导数为0,求最小值
∂ ∣ ∣ A x − B ∣ ∣ 2 2 ∂ x = 2 A T A x − 2 A T B = 0 \frac{∂||Ax-B||_2^2}{∂x}=2A^TAx-2A^TB=0 xAxB22=2ATAx2ATB=0
​ 最小二乘的解为:
x = ( A T A ) − 1 ( A T B ) x=(A^TA)^{-1}(A^TB) x=(ATA)1(ATB)
​ 加权最小二乘(WLS)
x 估 计 = ( A T P A ) − 1 ( A T P B ) x_{估计}=(A^TPA)^{-1}(A^TPB) x=(ATPA)1(ATPB)

​ 模型误差为(n为条件数,t为未知数,分别为矩阵A的行数的列数,n>t)
σ = ( ∣ ∣ A x 估 计 − B ∣ ∣ 2 2 n − t ) σ=\sqrt(\frac{||Ax_{估计}-B||_2^2}{n-t}) σ=( ntAxB22)

应用

直线拟合

  • 仿真一组参数
X = range(0, 100, 10)
Y = [5 * _+  random.randint(0, 100) for _ in X]
  • LS 拟合直线y=kx+b
def cal_model(X, Y):
    # y = k*x + b  最小二乘法
    Bval, Lval = [], []
    for _x, _y in zip(X, Y):
        Bval.append([_x, 1])
        Lval.append([_y])
    Bmat = np.matrix(Bval)
    Lmat = np.matrix(Lval)
    gRes = (Bmat.T * Bmat).I * (Bmat.T * Lmat)
    Vmat = Bmat * gRes - Lmat
    sigma = np.sqrt(Vmat.T * Vmat / (len(X) - 2))
    return gRes.tolist(), sigma
  • 直线拟合误差
def cal_model_error(para, x, y):
    y_gj = para[0][0] * x + para[1][0]
    return y_gj - y
  • 仿真结果可视化
x1 = 0
y1 = para[0][0] * x1 + para[1][0]
x2 = 90
y2 = para[0][0] * x2 + para[1][0]

fig = plt.figure()
plt.scatter(X, Y)
plt.plot([x1, x2], [y1, y2], color='r')
plt.rcParams['font.sans-serif'] = 'SimHei'
plt.title('LS直线拟合')
plt.show()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值