欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

线性回归最小二乘法

程序员文章站 2024-03-07 20:54:21
...

在现实当中,我们要研究一个问题,譬如说银行贷款和个人收入问题

上面这个问题就是最简单的一元线性模型,首先看几个定义

分类问题  监督学习中,如果预测的变量是离散的,我们称其为分类(如决策树,支持向量机等)
回归问题  如果预测的变量是连续的,我们称其为回归
一元线性  回归分析中,如果只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。
多元线性 如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。
对于二维空间线性是一条直线;对于三维空间线性是一个平面,对于多维空间线性是一个超平面

首先定义模型:
其中ei为样本误差

线性回归最小二乘法

定义损失函数:

线性回归最小二乘法

这边问什么要用真实值和预测值之间差的平方做累加呢

下面给出最小二乘法由来的推导

线性回归最小二乘法

上面是损失函数,我们现在目的使得损失函数尽可能的小,就是求如上Q的最小值,函数求极值问题,这里就用到了导数,导数的意义是导数大于0的x处函数递增,导数小于0处x的函数递减,导数为0既为函数的极值点

下面给出过具体的计算过程

线性回归最小二乘法

根据β0, β1的公式,就可以拿现有的x和y数据求出β0, β1具体的值了

 

对于多元线性回归模型

其基本的形式为:

线性回归最小二乘法

转换成向量形式之后写成

线性回归最小二乘法

它的损失函数为

线性回归最小二乘法

下面是推导过程,在翻阅资料的时候 从https://www.jianshu.com/p/edaf949bcaeb

这篇文章中受到了很大的启发

线性回归最小二乘法

用最小二乘的矩阵求导求线性回归最小二乘法存在一定的局限性

1.如线性回归最小二乘法的逆矩阵不存在,则无法使用最小二乘法,这边要使用梯度下降法

2.当特征n非常的大时,计算线性回归最小二乘法的逆矩阵比较耗时

3.如果拟合函数不是线性,无法使用最小二乘法

下面是最小二乘法的实现

from numpy import *
import numpy as np
from matplotlib import pyplot as plt

data = np.array([[1,2],[3,3],[5,7],[6,8]])
#数据处理
m,n = np.shape(data)
x_data = np.ones((m,n))
y_data = np.ones((m,1))
x_data[:,1] = data[:, 0]
y_data[:,0] = data[:, n-1]
x_t = x_data.T
#求乘积
x_t_plus_x = np.dot(x_t ,x_data)
#得到x_t_plus_x的逆矩阵
XN = np.linalg.inv(np.matrix(x_t_plus_x))

#根据公式得出结果
THETA = XN * x_t * y_data

print(THETA)

plt.plot(x_data[:,-1],y_data,"ob")
plt.plot(x_data[:,-1],x_data * THETA,color="red",linewidth=2)
plt.title("matrix equation")
plt.xlabel("x axis")
plt.ylabel("y axis")
plt.show()
#原始数据

线性回归最小二乘法

从上图可以看出具体的拟合情况