Python实现简单与多元线性回归详解
目录
一、简单线性回归示例
1、数据准备与分析
2、结果可视化
二、多元线性回归示例
1、数据准备与分析
2、结果解释
线性回归是数据分析中常用的一种方法,用于探索两个或多个变量之间的线性关系。本文将通过两个示例,介绍如何在Python中实现简单线性回归和多元线性回归模型,并展示如何使用统计方法和机器学习库来进行分析。
一、简单线性回归示例
1、数据准备与分析
在简单线性回归示例中,用上图这一组数据集,其中包含了广告投入(自变量)和对应的销售额(因变量)。我们的目标是建立一个模型,来预测广告投入对销售额的影响。
import pandas as pd
import statsmodels.api as sm
import matplotlib.pyplot as plt
# 加载数据集
data = pd.read_csv("data.csv")
x = data[['广告投入']]
y = data[['销售额']]
# 添加常数项
X = sm.add_constant(x)
# 构建线性回归模型
model = sm.OLS(y, X)
result = model.fit()
# 输出回归结果摘要
print(result.summary())
在这段代码中,我们首先使用pandas
库加载了名为data.csv
的数据集,并从中选择了广告投入和销售额这两列作为自变量和因变量。接着,我们使用statsmodels
库中的OLS
(普通最小二乘)方法拟合了一个线性回归模型。通过result.summary()
,我们可以打印出模型的详细统计摘要,包括参数估计、显著性检验以及模型拟合度等信息。
2、结果可视化
为了更直观地理解模型拟合效果,我们将数据点和回归线一起绘制在同一个图上:
# 绘制数据和拟合线
y_pr = result.fittedvalues
fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(x, y, 'o', label='data') # 原始数据散点图
ax.plot(x, y_pr, 'r--', label='OLS') # 拟合的线性回归线
ax.legend(loc='best')
plt.xlabel('广告投入')
plt.ylabel('销售额')
plt.title('简单线性回归拟合')
plt.show()
在这段代码中,我们使用了matplotlib
库来绘制散点图(原始数据)和红色虚线(线性回归拟合线),以直观地展示广告投入与销售额之间的关系。
二、多元线性回归示例
1、数据准备与分析
在多元线性回归示例中,用上图中一个包含体重、年龄和血压收缩的数据集,我们的目标是建立一个模型来预测血压收缩值,使用体重和年龄作为预测因子。
import pandas as pd
from sklearn.linear_model import LinearRegression
# 加载数据集
data = pd.read_csv("多元线性回归.csv", encoding='gbk', engine='python')
# 创建线性回归模型
lr_model = LinearRegression()
# 准备自变量和因变量
x = data[['体重', '年龄']]
y = data[['血压收缩']]
# 拟合模型
lr_model.fit(x, y)
# 打印模型评分
score = lr_model.score(x, y)
print(f"模型评分 R^2: {score:.2f}")
在这段代码中,我们使用了sklearn
库中的LinearRegression
来构建和训练了一个多元线性回归模型。通过lr_model.score()
,我们可以评估模型的拟合优度,这里使用的是R平方(R^2)作为评估指标,用于衡量模型对数据的解释能力。
2、结果解释
接下来,我们可以使用训练好的模型来预测新的数据点,并获取模型的系数和截距,以便进一步解释模型:
# 预测新数据点
predictions = lr_model.predict([[80, 60]])
print(f"预测血压收缩值 (体重=80, 年龄=60): {predictions}")
# 批量预测
batch_predictions = lr_model.predict([[70, 30], [70, 20]])
print(f"批量预测血压收缩值:\n{batch_predictions}")
# 获取模型系数和截距
coefficients = lr_model.coef_
intercept = lr_model.intercept_[0]
print(f"线性回归方程为:血压收缩 = {coefficients[0][0]} * 体重 + {coefficients[0][1]} * 年龄 + {intercept:.2f}")
通过这些代码,我们可以预测新的血压收缩值,同时输出了模型的系数(体重和年龄的权重)和截距,从而构建了多元线性回归模型的方程式。
作者:01_6