第二讲 Sklearn+numpy实现线性回归预测

Sklearn+numpy实现线性回归预测

一 本节课程介绍

1.1 知识点

1、线性回归基本介绍;
2、numpy实现线性回归计算;
3、sklearn实现线性回归拟合;

二 课程内容

2.1 线性回归基本介绍

线性回归是指利用线性方程y=ax+b实现对自变量和因变量之间的关系回归预测,其变量之间是相互独立的,且要求其变量符合正态分布,常用在数据预测上。
举个例子,比如你的智力为10,体力为8,思考灵活度为6,此时考试可以得分85分。那么多个这种数据输入模型,可以使用线性回归预测智力为9,思考灵活度为9,体力为9时的考试得分 。
线性回归又分为一元线性回归和多元线性回归。一元线性回归其方程式为y=w
x+b;多元线性回归为y=w1x1+w2x2+w3x3……,其按照矩阵形式可以统一写为y=WTX。其中y和X为变量,即我们需要求解的参数即为W。

2.1.1 最小二乘法求解线性回归

最小二乘法是一种数据拟合方法,其本质是利用最小误差平方来求解数据最佳匹配参数。假设其线性表达式为y=w*x+b,设置其预测值与真实值差值的平方和作为损失值Q,为了使得损失值最小,需要分别对参数W和B求其偏导,最终求得其需求解的公式。
np.linalg.inv(x.T.dot(x)).dot(x.T).dot(y)。其中inv为逆矩阵,x.T为x的转置,dot函数为点乘。

2.1.2 梯度下降法拟合线性回归

梯度下降法是指通过计算函数梯度,按照y(t+1)=y(t)-g*l。其中g为梯度,l为设置的固定值,用来帮助计算每步走的长度。需要使得函数为最优值,即需要满足模型快速收敛到最优解,需要满足梯度g为其个参数偏导取负值,即为其梯度的相反方向可以使得模型最快拟合最优值。
思想:
1:随机初始化参数确定模型a0 、a1,得到一个损失函数值。
2:使用梯度减少的更新方法更新参数a0 、a1,使得每一次所对应的损失函数的值越来越小。
3:直到更新参数损失函数的值变化波动不大,表示斜率到达最平稳处参数不变化进而损失函数不变化,找到损失函数最小值,此时对应的参数为最优解。

三 实验测试

3.1 numpy实现最小二乘法拟合线性回归

首先要导入库:

import numpy as np
import matplotlib.pyplot as plt

(1)设置X参数值随机生成的200行一列的均匀分布数据乘以5。

X = 5 * np.random.rand(200, 1)

(2)设置y与x之间的关系式如下,其中np.random.randn(200, 1)作为噪声项,3和8是我们需要求解的值,即最终求解的矩阵为[[3],[8]]为最完整的答案:

y = 3 + 8 * X + np.random.randn(200, 1)

(3)设置x参数要加上一个偏置项,即y=w*x+b,其中b是乘以1的,故需要生成200行一列的1用来求解b。:

x=np.c_[np.ones((200, 1)), X]#作为求解偏置项,即偏置项需要乘以1,而不是x

(4)根据公式求解参数矩阵:

theta_best = np.linalg.inv(x.T.dot(x)).dot(x.T).dot(y)

最终模型运行后值为:
在这里插入图片描述

(5)构建需要预测的x值,按照上面的方式一样:

X_test = np.array([[0],[5]])

X_pred=np.c_[np.ones((2, 1)), X_test]#作为求解偏置项,即偏置项需要乘以1,而不是x
(6)预测值为其点乘参数y=WT*X:

y_predict = X_pred.dot(theta_best)

(7)绘制图可视化,为折线图和散点图

plt.plot(X_test, y_predict, 'r-')
plt.plot(X, y, 'b.')

最终可查看拟合效果:
在这里插入图片描述

3.2 sklearn实现线性回归预测

首先要导入库:

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression

(1)设置X参数值随机生成的200行一列的均匀分布数据乘以5。

X = 5 * np.random.rand(200, 1)

(2)设置y与x之间的关系式如下,其中np.random.randn(200, 1)作为噪声项,3和8是我们需要求解的值,即最终求解的矩阵为[[3],[8]]为最完整的答案:

y = 3 + 8 * X + np.random.randn(200, 1)

(3)使用sklearn中的线性回归梯度下降法拟合:

lin_reg = LinearRegression()
lin_reg.fit(X, y)

最终模型运行后值为:
在这里插入图片描述

(4)构建需要预测的x值,按照上面的方式一样:

X_test = np.array([[0],[5]])

(5)使用sklearn预测:

y_predict =lin_reg.predict(X_test)

(6)绘制图可视化,为折线图和散点图

plt.plot(X_test, y_predict, 'r-')
plt.plot(X, y, 'b.')

最终可查看拟合效果:
在这里插入图片描述

四 思考与作业

(1)尝试更多数据预测
是否可以将X的维度扩充为300行3列,修改实例。
(2)是否可以尝试使用numpy实现梯度下降拟合线性回归

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI看世界

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值