线性回归最小二乘法

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

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

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

首先定义模型:
其中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()
#原始数据

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

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值