详解 Python 实现线性回归模型:从理论到实践

线性回归是机器学习中最基础也最常用的算法之一,它可以用来自变量和因变量之间的线性关系进行建模。本文将通过实际代码示例,详细介绍如何使用 Python 的 scikit-learn 库实现线性回归模型,包括单变量、多变量线性回归的完整流程。

线性回归基本概念

线性回归的核心思想是寻找一条最佳拟合直线(或超平面)来描述自变量和因变量之间的关系。对于单变量线性回归,其数学表达式为:

y = ax + b

其中,a 是斜率(系数),b 是截距。

对于多变量线性回归,表达式扩展为:

y = a₁x₁ + a₂x₂ + ... + aₙxₙ + b

这里的 x₁, x₂, ..., xₙ是多个自变量,a₁, a₂, ..., aₙ是对应的系数,b 是截距。

LinearRegression 类参数解析

在 scikit-learn 库中,LinearRegression 类是实现线性回归的主要工具,它的常用参数包括:

  • fit_intercept:布尔值,是否计算模型的截距。如果为 False,则直线过原点
  • normalize:布尔值,是否将数据归一化
  • copy_X:布尔值,是否对输入数据 X 进行复制。如果为 False,则可能会覆盖原数据
  • n_jobs:整数,计算时使用的任务个数。设置为 - 1 表示使用所有可用的 CPU

LinearRegression 类的主要方法:

  • fit(X, y):对训练数据 X 和 y 进行模型训练
  • predict(X):使用训练好的模型对新数据 X 进行预测
  • score(X, y):返回模型的决定系数 R²,用于评估模型拟合效果

单变量线性回归实践

单变量线性回归研究的是一个自变量与一个因变量之间的关系。下面以 "广告投入与销售额" 的关系为例进行演示:

import pandas as pd
from sklearn.linear_model import LinearRegression

# 读取数据
data = pd.read_csv(r"D:\pythonProject11\class\data(1).csv")

# 定义自变量和因变量
x = data[["广告投入"]]  # 自变量,注意需要二维结构
y = data[["销售额"]]    # 因变量

# 创建并训练模型
lr_model = LinearRegression()
lr_model.fit(x, y)

# 评估模型
score = lr_model.score(x, y)

# 获取模型参数
a = round(lr_model.coef_[0][0], 2)  # 系数
b = round(lr_model.intercept_[0], 2)  # 截距

# 输出结果
print(f"线性回归模型为y = {a}x + {b}")
print(f"模型R²评分:{round(score, 4)}")

代码解析:

  1. 首先导入必要的库,pandas 用于数据处理,LinearRegression 用于构建模型
  2. 使用 pd.read_csv () 读取数据文件
  3. 选择 "广告投入" 作为自变量 x,"销售额" 作为因变量 y
  4. 创建 LinearRegression 模型实例并使用 fit () 方法进行训练
  5. 使用 score () 方法获取模型的 R² 评分,该值越接近 1 表示模型拟合效果越好
  6. 通过 coef_属性获取回归系数,通过 intercept_属性获取截距
  7. 最后输出回归方程和模型评分

多变量线性回归实践

当影响因变量的因素不止一个时,就需要用到多变量线性回归。下面以 "体重、年龄与收缩压" 的关系为例:

import pandas as pd
from sklearn.linear_model import LinearRegression

# 读取数据
data = pd.read_csv(r"D:\pythonProject11\class\多元线性回归.csv", encoding='gbk')

# 定义自变量和因变量
x = data[["体重", "年龄"]]  # 多个自变量
y = data["血压收缩"]        # 因变量

# 创建并训练模型
lr_model = LinearRegression()
lr_model.fit(x, y)

# 评估模型
score = lr_model.score(x, y)

# 获取模型参数
a = lr_model.coef_  # 系数数组,包含两个元素,分别对应体重和年龄
b = lr_model.intercept_  # 截距

# 处理结果,保留两位小数
result_x1 = round(a[0], 2)  # 体重的系数
result_x2 = round(a[1], 2)  # 年龄的系数
result_y = round(b, 2)      # 截距

# 输出结果
print(f"模型R²评分:{score}")
print(f"线性方程为: y = {result_x1}x1 + {result_x2}x2 + {result_y}")

在多变量线性回归中,coef_返回的是一个数组,数组中的每个元素对应一个自变量的系数。上述代码中,result_x1 是体重的系数,result_x2 是年龄的系数,它们表示在其他变量不变的情况下,该变量每变化 1 单位对因变量的影响。

糖尿病数据预测实例

下面我们用一个更复杂的例子来演示线性回归的应用,使用糖尿病数据集中的多个特征来预测目标变量:

python

运行

import pandas as pd
from sklearn.linear_model import LinearRegression

# 读取数据
data = pd.read_csv(r"D:\pythonProject11\class\糖尿病数据.csv")

# 定义自变量和因变量
x = data[["age", "sex", "bmi", "bp", "s1", "s2", "s3", "s4", "s5", "s6"]]  # 多个特征
y = data["target"]  # 目标变量

# 创建并训练模型
lr_model = LinearRegression()
lr_model.fit(x, y)

# 评估模型
score = lr_model.score(x, y)

# 使用模型进行预测
new_data = [[-0.005514555, -0.044641637, 0.042295589, 0.024574144, 0.023860567,
             0.01, 0.02, 0.03, 0.04, 0.05]]  # 新的样本数据

prediction = lr_model.predict(new_data)

# 输出结果
print(f"预测结果: {prediction}")
print(f"模型评分: {score}")

预测时,我们需要提供与训练数据结构相同的新数据(特征数量和顺序必须一致),然后调用 predict () 方法即可得到预测结果。

相关系数分析

在进行线性回归之前,通常会先分析变量之间的相关性,这可以通过计算相关系数来实现:

import pandas as pd

# 读取数据
data = pd.read_csv("你的数据文件路径")

# 计算相关系数
correlation = data[["变量1", "变量2", "变量3"]].corr()
print(correlation)

相关系数的取值范围在 - 1 到 1 之间:

  • 接近 1 表示强正相关
  • 接近 - 1 表示强负相关
  • 接近 0 表示几乎没有线性相关

分析相关系数可以帮助我们选择合适的自变量,提高模型效果。

总结

本文介绍了使用 Python 的 scikit-learn 库实现线性回归的完整流程,包括:

  1. 线性回归的基本概念和数学表达式
  2. LinearRegression 类的参数和方法
  3. 单变量线性回归的实现(广告投入与销售额)
  4. 多变量线性回归的实现(体重、年龄与血压)
  5. 如何使用训练好的模型进行预测
  6. 相关系数分析的重要性

线性回归作为一种简单而强大的模型,在很多实际问题中都有广泛应用。但需要注意的是,它假设变量之间存在线性关系,对于非线性关系的数据,可能需要考虑其他模型或对特征进行转换。

通过本文的示例代码,相信你已经掌握了线性回归的基本用法。在实际应用中,还需要结合数据预处理、特征工程和模型评估等步骤,才能构建出更稳健的预测模型。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值