# 最小二乘法 模型_线性回归模型与最小二乘法

本文详细介绍了线性回归的基本概念,包括一元线性回归和多元线性回归,重点阐述了如何利用最小二乘法求解回归系数。通过具体的Python代码示例,展示了如何计算和应用这些方法,同时也探讨了最小二乘法在多项式曲线拟合中的应用。
摘要由CSDN通过智能技术生成

线性回归

1、基本概念

线性回归假设因变量与自变量之间存在线性关系,因变量可通过自变量线性叠加而得到,即因变量和自变量之间可用如下方式表示。

4a724745d4fd573e8d3e535047f4dcad.png

式中d4dba8d6fb5e8b1e1730f9ba7156491e.png为自变量,a0a8f6dc841c723e4c065bb0cbee3ba6.png为权重系数,53b0ff82308c6f0a006173c3975d4f47.png为偏置。

线性回归就是要解决如何利用样本求取56b2b66c8ac62662b308662190f3d881.png拟合出上述表达式,获得最佳直线的问题。最常用的就是最小二乘法。 

最小二乘法:最佳拟合线下,将已知样本的自变量代入拟合直线,得到的观测值与实际值之间的误差平方和最小。

2、一元线性回归

为了好理解,先从简单的情况开始,即一元线性回归。

2.1、利用方程组来解系数

假设因变量和自变量可用如下函数表示:

a41350ebfe128d0c54f4087167ba5b18.png对于任意样本点635f4b07ac01b2901d215fc4c6d4f1c5.png有误差b815386837f8265607a4181a769aa10d.png误差平方和

d81682c44c59dea384d87d895edc4682.png

那什么样的a和b会使得误差平方和最小呢? 

上面是求最值的问题,我们会想到导数和偏导数,这里在偏导数等于0的地方能取到极值,并且也是最值。 
分别对a和b求偏导得到如下表达式: 

6aada058f95301bf7b730bb63649d060.png

通过对二元一次方程组 

7d31a0693256c2bf6d8b5552617f7629.png

进行求解,可以得到如下解: 

3c52324c3a70676dc5e4520c24edb8b5.png

上面的数学过程用代码表示如下:

import numpy as np

import matplotlib.pyplot as plt

def calcAB(x,y):

    n = len(x)

    sumX, sumY, sumXY, sumXX = 0, 0, 0, 0

    for i in range(0, n):

        sumX += x[i]

        sumY += y[i]

        sumXX += x[i] * x[i]

        sumXY += x[i] * y[i]

    a = (n * sumXY - sumX * sumY) / (n * sumXX - sumX * sumX)

    b = (sumXX * sumY - sumX * sumXY) / (n * sumXX - sumX * sumX)

    return a, b

xi = [1,2,3,4,5,6,7,8,9,10]

yi = [10,11.5,12,13,14.5,15.5,16.8,17.3,18,18.7]

a,b=calcAB(xi,yi)

print("y = %10.5fx + %10.5f" %(a,b))

x = np.linspace(0,10)

y = a * x + b

plt.plot(x,y)

plt.scatter(xi,yi)

plt.show()

python数据散点和拟合的直线如下: 

cbf47af958286caa0bf5b9ec08ff40a1.png

2.2、利用矩阵的方法来求解系数

函数42c76cf3bb7119f0ca109807aaacd006.png

也可以表示成如下的形式 

117b438fe5035701b644daed87b4f7fe.png

式中784bf4000225449dc91f876efea5302e.png

对于n个样本,此时损失函数(即误差平方和)为:

12bad5116f00a80433fe8d0e2dd2f387.png

假如我们将样本表示成如下形式: 

c7d1a22c627d8f15d09119f458382c44.png

18fae3aa512aef82485b352ab7b3f708.png

进一步,可以将损失函数表示如下形式: 

4ee5adce82f306b685c43490a5bdee9b.png

L对W求导,可得到 

6900b49f56c97fbb44b8eb1b96176a40.png

令导数为0,则有 

115ab5a6625427e6187ebf29eef3dc66.png

从而 

dbbb3bdaa1d07968f69d07ffd9199389.png

进而可以求得 

b440d18eacdbe1a6bfcbf37afbc8d6fd.png

上面的数学过程用代码表示如下:

x = [1,2,3,4,5,6,7,8,9,10]

y = [10,11.5,12,13,14.5,15.5,16.8,17.3,18,18.7]

X = np.vstack([np.ones(len(x)),x]).T

Y = np.array(y).T

W=np.dot(np.matrix(np.dot(X.T,X))**-1,np.dot(X.T,Y))

yi=np.dot(X,W.T)#这里公式里是不需要转置的,但由于矩阵运算时W自动保存成一行多列的矩阵,所以多转置一下,配合原公式的计算。

print(X)

print(Y)

print(W)

print(yi)#拟合出的预测点

plt.plot(x,y,'o',label='data',markersize=10)

plt.plot(x,yi,'r',label='line')

plt.show()

结果如下:

X=

[[  1.   1.]

 [  1.   2.]

 [  1.   3.]

 [  1.   4.]

 [  1.   5.]

 [  1.   6.]

 [  1.   7.]

 [  1.   8.]

 [  1.   9.]

 [  1.  10.]]

Y=

[ 10.   11.5  12.   13.   14.5  15.5  16.8  17.3  18.   18.7]

W=

[[ 9.30666667  0.98606061]]

yi=

[[ 10.29272727]

 [ 11.27878788]

 [ 12.26484848]

 [ 13.25090909]

 [ 14.2369697 ]

 [ 15.2230303 ]

 [ 16.20909091]

 [ 17.19515152]

 [ 18.18121212]

 [ 19.16727273]]

7359c4299f23bf8ff102b3a80a5a0cd2.png

3、多元线性回归

将一元线性回归及回归系数的计算公式推广到多元线性回归也是一样。 损失函数可表示如下: 

9506c15466e0c398f60c131e01ab0137.png

对L求导有 

5e7488d553a3a708db3e15feb3869b0e.png

不防令

be6c6f71c1106b2d377b319b78843efd.png

则上式可化简为

ea5341ba0b956a4ddd950ec434c28f8e.png

9949b961136077be8a3156335bea60af.png

05798eef247e2801c1e6df9ed357dd4a.png

cde25e1e50ef565dd8f243317b8fa7c8.png

fb8893eaae370f77a88bd9341f27e271.png

30644bdf4d1e2b20e15aa3887840774a.png

则 

be6df3fd335889dd32440b1245f605b0.png

3.1、当矩阵满秩时(数据点的个数大于x的维度时)

令导数为0的方程组有足够的已知条件求解,令导数为0,则有 

de7062749d0bb89757aa9c2c9686838a.png

5b860d37377f66e310aeeb017b74b291.png

则有 

c483cc0ca8ed1cdedbf0af40a99423fa.png

从而有 

8203c760ff0cc725eef4c338c8129022.png

3.2、当矩阵不满秩时

此时利用导数为0方程组个数不够,不能够全部解出参数, 
可利用梯度下降法求近似最优解 

0a600a6d4943b7f08a0c49ee94e14c69.png

而梯度下降步长初始化可随机设置,因而上式不防写成 

47fa4bbad7a3007551b57dd7d7c66d36.png

最小二乘法多项式曲线拟合

多项式曲线拟合与多元线性回归拟合不同点在于,多元线性回归自变量有多个,因变量是多个自变量的线性组合,其形式为y=w0+w1x1+⋯+wnxn" role="presentation" style="max-width: none; word-wrap: normal; line-height: normal; float: none; direction: ltr; max-height: none; min-width: 0px; min-height: 0px; word-break: break-all; color: rgb(79, 79, 79); box-sizing: border-box !important;">

39e3d2b2003595a8618772af9f7f88a8.png

而多项式拟合自变量还是一个,只不过因变量可以看作是自变量不同多项式的线性组合,其形式为

98c5613901f920e80cf16b65e93cd1e0.png

但利用矩阵计算时,如果满秩,两者系数的表达方式是一样的

f6ab9cc576307530f6bfc406156c2246.png

概念

默认地认为因变量是自变量的多项式的线性组全,即有如下形式

3dbc6cf7dbf89d6b43992edb69ff4d96.png

最小二乘法多项式曲线拟合,根据给定的m个点,并不要求这条曲线精确地经过这些点,而是拟合曲线71e34577bfd19d768278c646a0c57b69.png上的数据点到原数据点的误差平方和最小。即有 

ee340a83ed6a29a9c56dff2c9754c12b.png

回归系数求解

求最值问题,如果直接求解那么必然在可能的极值点获得(此时没有边界限制)。 对(1)式求偏导,如下 

49ad8e232dbc0cfa9c30604a31864a9b.png

为便于理解,我们每次都只对w的一个维度求偏导,则有 

e34323b5ba2ea803a4eb569253e0983f.png

即 

7a25fc9332fb262d3ae358cfa09a5e9e.png

f0db1bd8c5a126b15b2c315f38d533e3.png

937fdf3d1a670563bf7c7eca18420a8f.png

写成矩阵形式有

510b5b79f333fa584609e74bae493809.png

将这个范德蒙得矩阵化简后可得到: 

5b78b1170d1aa4003c2ca69e3a9ebc9c.png

eb26baa8b49bb9ec55e1728635c33695.png

7064516561efc4db90c9cf3d8e352b85.png

便得到了系数矩阵A" role="presentation" style="max-width: none; box-sizing: border-box; word-wrap: normal; outline: 0px; display: inline; line-height: normal; float: none; direction: ltr; max-height: none; min-width: 0px; min-height: 0px; border-width: 0px; border-style: initial; border-color: initial; word-break: break-all;">A,同时,我们也就得到了拟合曲线。 其实我想说的是看到(2)中的矩阵等式,这个等式都不用推导的,因为函数的表达式就是这样的代入,代入样本后自然会有这样的等式。 而(3)通过矩阵运算自然就能得到。 

用python代码编写多项式回归代码,结果如下:

5a5eb20390402c908c830f7701bbe050.png

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值