文章目录
一、sklearn的介绍
- sklearn(Scikit-learn)是Python中用于机器学习的一个非常流行的库,它提供了大量的算法和工具来构建和评估模型。线性回归是统计学中用于预测一个或多个自变量(特征)和一个因变量(目标)之间线性关系的方法。回归是一种应用广泛的预测建模技术,这种技术的核心在于预测的结果是连续型变量。sklearn中的线性模型模块是linear_model,linear_model包含了多种多样的类和函数,我们使用LinearRegression类来进行线性回归。
二、线性回归
1.一元线性回归
- 如果只有一个自变量X,而且因变量Y和自变量X之间的数量变化关系呈近似线性关系,就可以建立一元线性回归方程,由自变量X的值来预测因变量Y的值,这就是一元线性回归预测。
2.一元线性回归的数学公式
- 如果因变量y和自变量x之间呈线性相关,那就是说,对于自变量x的某一值,因变量y对应的取值不是唯一确定的,而是有很多的可能取值,它们分布在一条直线的上下,这是因为y还受除自变量以外的其他因素的影响。这些因素的影响大小和方向都是不确定的,通常用一个随机变量ϵ 来表示,也称为随机扰动项。于是,Y和X之间的依存关系可表示为:
y
=
β
0
+
β
1
x
+
ϵ
y=β0+β1x+ϵ
y=β0+β1x+ϵ
如上就是总体的一元线性回归模型。其中β0和β1是常数。随机扰动项是 ϵ 无法直接观测的随机变量。
3.多元线性回归
多元线性回归的内容我们在下一篇讲到。
三、线性回归模型的优缺点
1.优点
- 线性回归模型可以很好地处理连续型因变量,并且可以预测因变量的取值范围。
- 可以帮助我们理解自变量对因变量的影响程度,以及自变量之间的交互作用。
- 线性回归模型在处理大量数据时非常有效,可以快速地进行参数估计和模型拟合。
- 是一种相对简单和直观的模型,可以通过统计软件轻松实现。
2.缺点
- 线性回归模型假设自变量与因变量之间存在线性关系,但在实际问题中,这种假设可能不成立。
- 当自变量之间存在多重共线性时,会导致参数估计不准确,甚至可能导致模型无法拟合数据。
- 线性回归模型对异常值非常敏感,一个异常值可能会极大地影响模型的拟合结果。
- 不能处理高维数据,当自变量数量较多时,模型的计算量和内存需求会迅速增加。
四、一元线性回归案例
1.介绍数据
我们使用的是广告投入与销售额之前关系的数据。如下:
2.导入库
import pandas as pd #pandas基于numpy封装的
from matplotlib import pyplot as plt
from sklearn.linear_model import LinearRegression
- pandas:用于数据处理和分析。
- matplotlib.pyplot:用于绘制图形,这里主要用于绘制散点图来直观展示“广告投入”与“销售额”之间的关系。
- sklearn.linear_model.LinearRegression:从sklearn库中导入线性回归模型,用于拟合和预测数据。
- 使用pandas的read_csv函数读取名为"data.csv"的CSV文件,该文件应包含两列数据:‘广告投入’和’销售额’。
3.读取数据并绘制散点图
data = pd.read_csv("data.csv")
a = data.广告投入
#绘制散点图
plt.scatter(data.广告投入,data.销售额)
plt.show()
这里使用 pd.read_csv函数来读取csv文件,并且使用matplotlib.pyplot库中的scatter函数来绘制散点图,如下所示。
4.建立回归模型
corr = data.corr()#求x和y的相关系数
#估计模型参数,建立回归模型
lr = LinearRegression()
x = data[['广告投入']]
y = data[['销售额']]
lr.fit(x,y)#训练模型
corr函数是用来求自变量x和因变量y之间的相关系数,也就是数据中广告投入与销售额的相关性。如下图,并且使用 fix 函数对模型进行训练。
5.模型检验
#第四步,对回归模型进行检验
"""此时的score指R方"""
# result = lr.predict(x)
score = lr.score(x,y)
a = round(lr.intercept_[0],2)
b = round(lr.coef_[0][0],2)
print("线性回归模型为:y = {}x + {}.".format(b,a))
计算模型的score值(也就是R²分数,即决定系数) 来评估模型的好坏。R²分数的值越接近1,说明模型的拟合效果越好。
再查看模型的截距(intercept)和斜率(coef),并且 lr.intercept是一维数据,lr.coef是二维数据,round函数是将数据进行四舍五入,然后保留小数点后两位。
最终输出回归模型:
6.模型预测
#第五步,利用回归模型进行预测
predict = lr.predict([[40],[45],[50]])
print(predict)
接着将自变量(广告投入)分别设为40,45,50对模型进行预测因变量(销售额),得到结果如下:
五、小结
- 本篇文章我们重点了使用sklearn来实现一元线性回归的案例,一元线性回归能够表明自变量和因变量之间的显著关系,并且模型的准确率很不错。
- 但也有很多局限性,比如一元线性回归模型假设自变量和因变量之间的关系是线性的,但在现实中,很多情况下二者的关系并不是严格的线性关系。
- 一元线性回归模型只能处理一个自变量,不能处理多个自变量之间的相互影响关系,这在实际问题中可能会出现。
- 下篇文章我们会重点介绍使用sklearn实现多元线性回归。