最小二乘法

最小二乘法是一种在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具。——百度百科

最小二乘法又称最小平方法,它通过最小化误差的平方和来寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得一个通过某个函数计算得到的预测值,然后使得这些求得的数据与真实数据之间误差(差距)的平方和为最小。

对于一元线性回归

简介

一元线性回归就是指,自变量X和因变量Y都是单个数据的情况下,自变量X和因变量Y之间的关系。

那么,X与Y之间有关系 一元二次多项式回归模型流程图 一元二次回归方程介绍_人工智能一元二次多项式回归模型流程图 一元二次回归方程介绍_深度学习_02一元二次多项式回归模型流程图 一元二次回归方程介绍_python_03都是未知数。

显然,对于单自变量和单因变量,有
一元二次多项式回归模型流程图 一元二次回归方程介绍_python_04

一元二次多项式回归模型流程图 一元二次回归方程介绍_一元二次多项式回归模型流程图_05

一元线性回归模拟

  1. 现在给定多组一元二次多项式回归模型流程图 一元二次回归方程介绍_深度学习_06值,Y是X对应的真实结果值。
    对于一元线性关系,多组一元二次多项式回归模型流程图 一元二次回归方程介绍_深度学习_06的X值和Y值是一对一的关系。
  2. 给a和b两个随机值。
  3. 一元二次多项式回归模型流程图 一元二次回归方程介绍_一元二次多项式回归模型流程图_08代入公式 一元二次多项式回归模型流程图 一元二次回归方程介绍_一元二次多项式回归模型流程图_09中,会得到当前预测值一元二次多项式回归模型流程图 一元二次回归方程介绍_python_10
  4. 使用最小二乘法来判断真实值一元二次多项式回归模型流程图 一元二次回归方程介绍_人工智能_11与预测值一元二次多项式回归模型流程图 一元二次回归方程介绍_python_10之间的关系(差距)。
    一元二次多项式回归模型流程图 一元二次回归方程介绍_python_13
  5. 那么有m组一元二次多项式回归模型流程图 一元二次回归方程介绍_深度学习_06值,这m组观测数据所有得到的残差值如下式
    一元二次多项式回归模型流程图 一元二次回归方程介绍_python_15
  6. 通过得到一元二次多项式回归模型流程图 一元二次回归方程介绍_一元二次多项式回归模型流程图_16可以知道目标函数一元二次多项式回归模型流程图 一元二次回归方程介绍_一元二次多项式回归模型流程图_09与真实值的差距,通过修改一元二次多项式回归模型流程图 一元二次回归方程介绍_一元二次多项式回归模型流程图_18一元二次多项式回归模型流程图 一元二次回归方程介绍_人工智能_19值来不断逼近真实值。
目标函数推广到抽象函数一元二次多项式回归模型流程图 一元二次回归方程介绍_人工智能_20

在一般情况下,最小二乘法的一般形式为
一元二次多项式回归模型流程图 一元二次回归方程介绍_一元二次多项式回归模型流程图_21

机器学习方法自动迭代更新参数

使用机器学习的方法,根据给定的数据集来求得一元线性回归的目标函数一元二次多项式回归模型流程图 一元二次回归方程介绍_人工智能_20

首先,构造数据集

import numpy as np
import matplotlib.pyplot as plt
np.random.seed(0)
X = np.random.normal(size=(100,1),scale=1)
Y = 4 * X[:,0] + 2

我们制定了目标函数一元二次多项式回归模型流程图 一元二次回归方程介绍_深度学习_23

数据集构造好后,观察下数据的分布情况

plt.scatter(X,Y)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oWVUTOvU-1609130636844)(D:\Program File(x86)]\DECADEMO\laterseason.com\图片归档\最小二乘法在一元一次线性回归和二元一次线性回归上的作用\image-20201105211715272.png)

这是100组一元二次多项式回归模型流程图 一元二次回归方程介绍_python_24值的分布情况,可以看到它是有严格的一元线性关系的。

数据处理,拆分训练集与测试集

All_data = np.concatenate((X,Y.reshape(100,1)),axis=1)
np.random.shuffle(All_data)
train_data = All_data[:70,:]
test_data = All_data[70:,:]

随机初始化参数一元二次多项式回归模型流程图 一元二次回归方程介绍_算法_25一元二次多项式回归模型流程图 一元二次回归方程介绍_算法_26

W = np.random.normal(size=(1))
b = np.random.rand()
W_hat = np.concatenate((W,np.array([b]))).reshape(2,1)

为偏置值一元二次多项式回归模型流程图 一元二次回归方程介绍_算法_26一元二次多项式回归模型流程图 一元二次回归方程介绍_一元二次多项式回归模型流程图_28构造增广矩阵

X = train_data[:,:-1]
X = X.reshape(1,70)
Y = train_data[:,-1]
Y = Y.reshape(70,1)
X_hat = np.concatenate((X,np.ones((1,70))))

开始训练

训练过程:最小二乘法得到残差值一元二次多项式回归模型流程图 一元二次回归方程介绍_算法_29,梯度下降算法更新参数一元二次多项式回归模型流程图 一元二次回归方程介绍_一元二次多项式回归模型流程图_30一元二次多项式回归模型流程图 一元二次回归方程介绍_算法_26

lr = 0.001
Num = 1
W_list = []
b_list = []
loss_list = []
while True:
    # 更新参数
    W_hat = W_hat + lr * np.dot(X_hat,(Y - np.dot(X_hat.T,W_hat)))
    # 计算经验错误 loss
    loss = np.sum( (Y - np.dot(X_hat.T,W_hat))**2 )/2
    # 记录 w,b和loss
    W_list.append(W_hat[0])
    b_list.append(W_hat[1])
    loss_list.append(loss)
    Num = Num + 1
    print("Num: %d, loss: %f, w: %f, b: %f"%(Num,loss,W_hat[0],W_hat[1]))
    if loss < 1 or Num > 1000:
        break

观察训练过程

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-g4ISHhZJ-1609130636848)(D:\Program File(x86)]\DECADEMO\laterseason.com\图片归档\最小二乘法在一元一次线性回归和二元一次线性回归上的作用\image-20201105212425760.png)

可以看到,训练到50次左右时,一元二次多项式回归模型流程图 一元二次回归方程介绍_一元二次多项式回归模型流程图_32一元二次多项式回归模型流程图 一元二次回归方程介绍_python_03已经很接近真实值了。

再看看残差值一元二次多项式回归模型流程图 一元二次回归方程介绍_算法_29的下降曲线

plt.plot(loss_list)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xtuQajB3-1609130636852)(D:\Program File(x86)]\DECADEMO\laterseason.com\图片归档\最小二乘法在一元一次线性回归和二元一次线性回归上的作用\image-20201105212543694.png)

一元二次多项式回归模型流程图 一元二次回归方程介绍_算法_35值在迭代次数达到30次之后,就逐渐平稳,这说明此时目标函数已经接近最优情况。

plt.plot(W_list)
plt.plot(b_list)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-unvD2cnB-1609130636857)(D:\Program File(x86)]\DECADEMO\laterseason.com\图片归档\最小二乘法在一元一次线性回归和二元一次线性回归上的作用\image-20201105212657022.png)

一元二次多项式回归模型流程图 一元二次回归方程介绍_一元二次多项式回归模型流程图_32一元二次多项式回归模型流程图 一元二次回归方程介绍_python_03值的趋势也是如此。

一元线性回归对最小二乘法的总结

最小二乘法就是一种通过最小化误差的平方和来寻找最佳的函数匹配,这种思想不止可以应用在一元线性回归中,也可以应用在多元线性回归中。

但是我们目前看到的最小二乘算法在一元线性回归上的效果较好,我们也在二元线性回归中做了测试,结果并不乐观。