目录
1.一元线性回归
(1)线性回归模型的定义
线性回归模型是利用线性拟合的方式来探寻数据背后的规律,如下图所示,就是通过搭建线性回归模型来寻找这些散点(也称样本点)背后的趋势线(也称回归曲线),而通过这个回归曲线我们就能进行一些简单的预测分析或因果关系分析。
线性回归中,我们根据特征变量(也称自变量)来对反应变量(也称因变量)进行预测,根据特征变量的个数可将线性回归模型分为一元线性回归和多元线性回归。通过一个特征变量:工作年限对收入进行预测,就属于一元线性回归;通过多个特征变量:工作年限、行业、所在城市等对收入进行预测,就属于多元线性回归。这一小节主要先讲解下一元线性回归模型。
(2)一元线性回归的数学原理
一元线性回归模型也称为简单线性回归模型,其形式可以通过如下公式表达:
其中y为因变量,x为自变量,a表示回归系数,b表示截距。其中为实际值,
为预测值,一元线性回归的目的就是拟合出一条线来使得预测值和实际值尽可能的接近,如果大部分点都落在拟合出来的线上,那么该线性回归模型则拟合较好。
我们通过两者差值的平方和(该和也称为残差平方和)来进行衡量,公式如下,其中为∑为求和符号。此外,补充说明一句,在机器学习领域,该残差平方和也被称之为回归模型的损失函数。
显然我们希望这个和越小越好,这样实际值和预测值就更加接近,而数学上求最小值的方法为求导数,当导数为0时,该残差平方和最小。那么通过对残差平方和进行求导,然后令其导数为0便可以求得一元线性回归模型的系数a和截距b,这个便是一元线性回归的数学原理,学术上称其为最小二乘法。而在Python中就有专门的库来求解这里的系数a和截距b,而不需要我们去计算复杂的数学公式。
(3)一元线性回归的代码实现
1.绘制散点图
首先通过Matplotlib库先绘制几个散点,代码如下:
X=[[1],[2],[3],[4],[5]]
Y=[2,4,6,8]
其中自变量集合X需要写成二维结构形式,也即大列表里包含着小列表,这个其实是符合之后多元回归的逻辑,因为多元回归,一个因变量y可能对应着多个自变量x,比如对于三元线性回归(即有三个特征变量),此时的自变量集合X就需要写成类似如下形式:
X=[[1,2,3],[2,4,5],[4,6,8],[5,7,9]]
此时的散点如下图所示(附代码):
import matplotlib.pyplot as plt
X = [[1], [2], [4], [5]]
Y = [2, 4, 6, 8]
plt.scatter(X, Y)
plt.show()
2. 引入Scikit-learn库搭建模型
有了原始数据后,引入Scikit-learn库便可快速搭建线性回归模型,代码如下:
from sklearn.linear_model import LinearRegression
regr = LinearRegression()
regr.fit(X,Y)
3.模型预测
regr已经是搭建好的模型了,此时就可以通过该模型来预测数据了,比如自变量是数字1.5,那么通过predict()函数就能预测当自变量x=1.5时对应的因变量y了,代码如下:
y = regr.predict([[1.5]])
print(y)
注意这里的自变量还是得写成二维结构的形式,原理和之前绘制散点图时写成二维结构数据类似,此时获得的预测结果y如下所示,此时获得y为一个一维数组。
[2.9]
此外,如果想同时预测多个自变量,则可以使用如下代码:
y = regr.predict([[1.5], [2.5], [4.5]])
print(y)
此时的预测结果如下:
[2.9 4.3 7.1]