当前位置: 首页 > news >正文

详解 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. 相关系数分析的重要性

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

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

http://www.dtcms.com/a/303666.html

相关文章:

  • Windows提权(MS09-012 巴西烤肉)
  • MySQL5.7主从延迟高排查优化思路
  • RK3568基于mpp实现硬解码(二):FFmpeg + mpp实现ipc摄像头图像解码
  • ESP32学习-按键中断
  • Linux->模拟实现 fopen/fwrite/fclose
  • 项目实战(20)-基于POE的网络RFID读卡器
  • GaussianMesh运行指南
  • GaussDB 查看会话连接数
  • 大模型的开发应用(十九):AIGC基础
  • 【Unity3D实例-功能-移动】角色移动-通过WSAD(Rigidbody方式)
  • sqli-labs通关笔记-第23关 GET字符型注入(单引号闭合-过滤注释符 手工注入+脚本注入两种方法)
  • 自然语言处理NLP(2)
  • 【0基础PS】PS工具详解--选择工具--对象选择工具
  • Redis未授权访问的利用的几种方法原理以及条件
  • 嵌入式单片机中位带操作控制与实现
  • Synopsys:默认报告精度(report_default_significant_digits变量)
  • 【Python】自动化GIT提交
  • C语言(长期更新)第6讲:函数(二)
  • 复现《Local GDP Estimates Around the World》论文的完整指南
  • 历史版本的vscode下载地址
  • 模型压缩的一些整理
  • Fortran实现 3维反距离加权(IDW)插值算法
  • ETH 交易流程深度技术详解
  • Datawhale AI夏令营 task2 笔记问题汇总收集
  • 力扣988. 从叶结点开始的最小字符串
  • 商城系统-项目测试
  • 信息搜集目的原则方法思路工具(二)
  • DDoS攻击防御:从5G到T级防护方案全对比
  • 利用软件定义无线USRP X410、X440 电推进无线原型设计
  • Sentinel 不同层面的流控保护