基于Python的线性回归预测模型介绍及实践

基于Python的线性回归预测模型介绍及实践

  • 这是一篇学习的总结笔记
  • 参考自《从零开始学数据分析与挖掘》 [中]刘顺祥 著
  • 完整代码及实践所用数据集等资料放置于:Github

线性回归预测模型属于经典的统计学模型,该模型的应用场景是根据已知的变量(即自变量)来预测某个连续的数值变量(因变量)。例如,餐厅根据每天的营业数据(菜谱价格、就餐人数等等)来预测就餐规模或者营业额;网站根据访问的历史数据(包括新用户的注册量、老用户的活跃度等等)来预测用户的支付转化率;医院根据患者的病历数据(体检指标、既往病史、饮食习惯等等)来预测某种疾病发生的概率。
站在数据挖掘的角度看待线性回归模型,它属于一种有监督的学习算法,即在建模过程中必须同时具备自变量和因变量。此处重点介绍线性回归模型背后的数学原理和应用实践。通过对本知识的学习,我熟悉并基本掌握了以下内容:

  • 一元线性回归模型的实战
  • 多元线性回归模型的系数推导
  • 线性回归模型的假设检验
  • 线性回归模型的诊断
  • 线性回归模型的预测

有监督的学习算法

有监督学习是一种方法,通过这种方法,您可以使用标记的训练数据来训练一个函数,然后将其推广到新示例。该训练过程需要一位评论员参与,能够指出函数是否正确,然后更改函数以生成正确的结果。
在有监督学习中,训练数据进行了标记并由输入数据和所需输出组成,您可以使用这些数据创建一个函数(或模型)。监督以有用输出的形式出现,这反过来让您能够根据它产生的实际输出来调整函数。在训练后,您可以将此函数应用于新的观察值,生成理想情况下正确响应的输出(预测或分类)。

一元线性回归模型

一元线性回归模型也被称为简单线性回归模型,是指模型中只含有一个自变量和一个因变量,用来建模的数据集可以表示成 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x n , y n ) } \{(x_1,y_1),(x_2,y_2),...,(x_n,y_n)\} { (x1,y1),(x2,y2),...,(xn,yn)}。其中 x i x_i xi表示自变量 x x x的第 i i i个值, y i y_i yi表示因变量 y y y的第 i i i个值, n n n表示数据集的样本量。当模型构建好后,就可以根据其他自变量 x x x的值,预测因变量 y y y的值,该模型的数学公式可以表示成 y = a + b x + ϵ y=a+bx+\epsilon y=a+bx+ϵ如上公式所示,该模型特别像初中所学的一次函数。其中, a a a为模型的截距项, b b b为模型的斜率项, ϵ \epsilon ϵ为模型的误差项。模型中的 a a a b b b统称为回归系数,误差项 ϵ \epsilon ϵ的存在主要是为了平衡等号两边的值,通常被称为模型无法解释的部分。
平衡等号两边的值?该参数我们会在接下来进行详细介绍
为了快速理解简单线性回归模型的数学公式,我们以收入数据集为例,探究工作年限与收入之间的关系。首先我们导入数据集,绘制工作年限与收入之间的散点图,并根据散点图添加一条拟合线,部分代码如下:

# 导入数据集
income = pd.read_csv(r'C:\Users\Administrator\Desktop\Salary_Data.csv')
# 绘制散点图
sns.lmplot(x = 'YearsExperience', y = 'Salary', data = income, ci = None)
# 显示图形
plt.show()

在这里插入图片描述
如图反映的就是自变量YearsExperience与因变量Salary之间的散点图,从图中趋势来看,工作经验与收入之间存在明显的正相关关系,即工作经验越丰富,收入水平就越高(实时上也确实如此)。图中的直线就是关于散点的线性回归拟合线,那么我们如何得到该拟合线的数学表达式呢?

拟合线的求解

前面我们的数学表达式中说到:误差项 ϵ \epsilon ϵ的存在主要是为了平衡等号两边的值,我们怎么去理解这句话?我们试想一下,如果拟合线能精确地捕捉到每一个点(即所有的点都落在拟合线上),那么对应的误差项误差项 ϵ \epsilon ϵ应该为0(显然这是不太可能的,只有当自变量与因变量之间是严格的线性相关关系才可能)。按照这个思路来看,我们寻求的一条理想的拟合曲线,就是使得误差项 ϵ \epsilon ϵ达到最小。在这里误差项是 y y y a + b x a+bx a+bx的差,结果可正可负,因此我们此处刻画误差项最小的问题从最小二乘法的角度出发,即把问题转化为使误差项平方和最小。

最小二乘法

最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法还可用于曲线拟合。其他一些优化问题也可通过最小化能量或最大化熵用最小二乘法来表达。

误差的平方和公式可表示为: J ( a , b ) = ∑ i = 1 n ϵ 2 = ∑ i = 1 n ( y i − [ a + b x i ] ) 2 J(a,b)=\sum_{i=1}^{n}\epsilon^2=\sum_{i=1}^{n}(y_i-[a+bx_i])^2 J(a,b)=i=1nϵ2=i=1n(yi[a+bxi])2由于建模时自变量与因变量都是已知的,因此求解误差项平方和最小的问题就是求解上面函数 J ( a , b ) J(a,b) J(a,b)的最小值,而该函数的参数就是我们所要最终求解的回归系数 a a a b b b
该目标函数是一个二元二次函数,如需使得目标函数 J ( a , b ) J(a,b) J(a,b)达到最小,要求一个二元二次函数的极值,我们使用高等数学中求二元二次方程的极值的方法来入手考虑该问题,我们可以令函数分别对两个参数求偏导数,然后令两个偏导式都等于0,解该方程组可求得结果。

二元二次方程的极值

二元二次方程是指含有两个未知数,并且含有未知数的项的最高次数是二的整式方程,叫做二元二次方程。其一般式为ax2+bxy+cy2+dx+ey+f=0。(a、b、c、d、e、f都是常数,且a、b、c中至少有一个不是零;当b=0时,a与d以及c与e分别不全为零;当a=0时,c、e至少一项不等于零,当c=0时,a、d至少一项不为零)。
求解二元二次方程极值的一般方法为分别令方程对x与y的偏导数为0,求解方程组可得极值。

关于目标函数的推导过程如下:
①展开平方项目 J ( a , b ) = ∑ i = 1 n ( y i 2 + a 2 + b 2 x i 2 + 2 a b x i − 2 a y i − 2 b x i y i ) J(a,b)=\sum_{i=1}^{n}(y_i^2+a^2+b^2x_i^2+2abx_i-2ay_i-2bx_iy_i) J(a,b)=i=1n(yi2+a2+b2xi2+2abxi2ayi2bxiyi)②设偏导数为0 { ∂ J ∂ a = ∑ i = 1 n ( 0 + 2 a + 0 + 2 b x i − 2 y i + 0 ) = 0 ∂ J ∂ b = ∑ i = 1 n ( 0 + 0 + 2 b x i 2 + 2 a x i + 0 − 2 x i y i ) = 0 \begin{cases}\frac{\partial J}{\partial a}=\sum_{i=1}^{n}(0+2a+0+2bx_i-2y_i+0)=0\\\\\frac{\partial J}{\partial b}=\sum_{i=1}^{n}(0+0+2bx_i^2+2ax_i+0-2x_iy_i)=0\end{cases} aJ=i=1n(0+2a+0+2bxi2yi+0)=0bJ=i=1n(0+0+2bxi2+2axi+02xiyi)=0③和公式转换 { ∂ J ∂ a = 2 n a + 2 b ∑ i = 1 n x i − 2 ∑ i = 1 n y i = 0 ∂ J ∂ b = 2 b ∑ i = 1 n x i 2 + 2 a ∑ i = 1 n x i − 2 ∑ i = 1 n x i y i = 0 \begin{cases}\frac{\partial J}{\partial a}=2na+2b\sum_{i=1}^{n}x_i-2\sum_{i=1}^{n}y_i=0\\\\\frac{\partial J}{\partial b}=2b\sum_{i=1}^{n}x_i^2+2a\sum_{i=1}^{n}x_i-2\sum_{i=1}^{n}x_iy_i=0\end{cases} aJ=2na+2bi=1nxi2i=1nyi=0bJ=2bi=1nxi2+2ai=1nxi2i=1nxiyi=0④化解 { a = ∑ i = 1 n y i n − b ∑ i = 1 n x i n b ∑ i = 1 n x i 2 + ( ∑ i = 1 n y i n − b ∑ i = 1 n x i n ) ∑ i = 1 n x i − ∑ i = 1 n x i y i = 0 \begin{cases}a=\frac{\sum_{i=1}^{n}y_i}{n}-\frac{b\sum_{i=1}^{n}x_i}{n}\\\\b\sum_{i=1}^{n}x_i^2+(\frac{\sum_{i=1}^{n}y_i}{n}-\frac{b\sum_{i=1}^{n}x_i}{n})\sum_{i=1}^{n}x_i-\sum_{i=1}^{n}x_iy_i=0\end{cases} a=ni=1nyinbi=1nxibi=1nxi2+(ni=1nyinbi=1n

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值