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

Python 实践:单因子线性回归

在实际工程中,机器学习往往以“数据 → 处理 → 建模 → 评估”的流程展开。本文以“温度与冰淇淋销售额”为示例,完整演示如何使用 Python 工具链完成一次标准的单因子线性回归实践。

流程结构如下:

1、导入库

2、读取数据

3、数据清理

4、数据可视化

5、划分特征与标签

6、划分训练集与测试集

7、建立模型

8、训练模型

9、查看模型参数

10、模型预测

11、绘制线性回归线

12、模型评估

这是一套可复用的机器学习工程流程模板。

一、导入库与环境配置

import pandas as pdimport numpy as npimport matplotlib.pyplot as plt from sklearn.model_selection import train_test_splitfrom sklearn.linear_model import LinearRegressionfrom sklearn.metrics import mean_squared_error, r2_score import matplotlibmatplotlib.rcParams['font.sans-serif'] = ['SimHei']matplotlib.rcParams['axes.unicode_minus'] = False

1、第三方库说明

pandas:用于读取和处理结构化数据,核心数据结构为 DataFrame。

numpy:用于数值计算与数组操作。

matplotlib:用于数据可视化。

scikit-learn:机器学习工具库,提供统一的建模接口。

2、核心方法说明

train_test_split():划分训练集与测试集

LinearRegression():普通最小二乘线性回归模型

mean_squared_error():均方误差

r2_score():决定系数 R²

3、中文字体设置(可选)

matplotlib.rcParams 是一个字典对象,用于修改全局绘图配置:

• font.sans-serif:设置中文字体(Windows 常见为 SimHei;Mac/Linux 可能需要修改)

• axes.unicode_minus=False:解决负号显示异常问题。

这是绘图时常见的工程细节问题。

二、数据读取

df = pd.read_csv(path, encoding="utf-8")

1、文件读取

pd.read_csv() 用于从 CSV 文件中读取数据,并生成 DataFrame 对象。

• 参数 encoding:指定文件编码格式,避免解码错误。

DataFrame 是 pandas 的核心数据结构,类似带标签的二维表格。

2、基础检查

可使用 type(df) 查看对象类型。

可以使用 df.shape 属性查看数据维度(亦称“形状” shape),返回一个元组(行数, 列数)。

可以使用 df.head() 返回前 n 行数据(默认 5 行),能快速查看数据结构。

print("数据类型与形状:", type(df), df.shape)print(df.head())

3、获取特征列与标签列

以下为默认取前两列的示例:

x_col = df.columns[0] # 特征列y_col = df.columns[1] # 标签列

实际工程中建议使用与原 CSV 文件中一致的显式列名,例如:

x_col = "temperature"y_col = "sales"

4、可临时检查数据系列(可选):

print(df[x_col],df[y_col]) # df[x_col] 和 df[y_col] 均为一维数组 Series

此时也可使用 matplotlib 绘制散点图,直观观察数据的分布。

三、数据清理

df = df[[x_col, y_col]].dropna()

该行代码包含两个步骤:

• df[[x_col, y_col]]:筛选参与建模的两列

• .dropna():删除包含缺失值的样本行

.dropna() 的默认参数为:axis = 0, how = "any",表示按行删除,只要存在缺失值即删除该行。

数据清理是必要步骤,因为 LinearRegression() 默认不支持包含 NaN 的输入数据。若存在缺失值,模型训练将抛出异常。

在进入建模阶段之前进行数据清理,是监督学习的基本工程要求。

四、数据可视化

plt.figure() # 创建新的图形对象plt.scatter(df[x_col].to_numpy(), df[y_col].to_numpy()) # 绘制散点图plt.xlabel(x_col) # 设置横坐标标签plt.ylabel(y_col) # 设置纵坐标标签plt.title(f"散点图:{x_col} vs {y_col}") # 设置图形标题plt.show() # 显示当前图形

散点图用于观察数据是否呈现近似线性趋势。

若数据呈现近似线性趋势,则线性回归模型具有较好的建模合理性。

若数据呈现明显非线性趋势,则应考虑多项式回归或非线性模型。

五、划分特征与标签

X = df[[x_col]] # 必须二维y = df[y_col] # 可一维

在 scikit-learn 中:

• X 必须为二维结构 (样本数, 特征数)

即使只有一个特征,也必须为二维结构。因此使用双中括号确保 X 为二维 DataFrame。

• y 可以是一维结构

六、训练集与测试集划分

X_train, X_test, y_train, y_test = train_test_split( X, y, test_size=0.3, random_state=42)

train_test_split() 用于随机拆分数据为训练集与测试集。

• 参数 *arrays:数据集特征和标签(如 X, y)

• 参数 test_size:测试集比例或样本数,此处为 30%

• 参数 random_state:随机种子,用于保证实验结果可复现

训练集用于估计模型参数;测试集用于评估模型泛化能力。

七、模型建立与训练

model = LinearRegression()model.fit(X_train, y_train)

LinearRegression() 用于创建线性回归模型对象,实现的是普通最小二乘法:

y = w·x + b

model.fit() 会根据训练数据计算最优参数,并将结果保存在模型对象内部,返回模型自身(“已训练”状态)。

八、查看模型参数

w = float(model.coef_[0])b = float(model.intercept_)

属性说明:

• model.coef_:权重(斜率),NumPy 数组

• model.intercept_:截距,浮点数

这两个属性在调用 fit 之后才会被创建并赋值。

斜率:表示自变量 x 每增加 1 个单位,因变量 y 的平均变化量。

截距:表示当自变量 x 为 0 时模型给出的预测值。

打印回归方程有助于理解模型结果(可选):

print(f"回归方程:y = {w:.4f}x + {b:.4f}")

九、模型预测

y_pred = model.predict(X_test)

model.predict() 使用已训练模型对输入特征进行预测,返回预测值(NumPy 数组)。

输入特征的维度、特征数量以及列名结构必须与训练阶段保持一致。

十、绘制回归线

x_min = float(X[x_col].min()) # 计算特征列的最小值(作为回归线起点)x_max = float(X[x_col].max()) # 计算特征列的最大值(作为回归线终点)x_line = np.linspace(x_min, x_max, 100) # 在区间内生成 100 个等间隔数值 x_line_df = pd.DataFrame({x_col: x_line}) # 转为二维 DataFrame,并保持列名一致y_line = model.predict(x_line_df) # 使用训练好的模型计算对应预测值 plt.figure()plt.scatter(X[x_col].to_numpy(), y.to_numpy())plt.plot(x_line, y_line)plt.xlabel(x_col)plt.ylabel(y_col)plt.title(f"散点图:{x_col} vs {y_col}")plt.show()

绘制回归线时,保持与训练数据相同的特征格式。此处回归线用于整体趋势展示,因此使用全数据范围生成线段。

DataFrame.min()/max() 默认按列计算最小值/最大值。对 Series 调用 min()/max() 返回标量;对 DataFrame 调用时默认按列计算并返回 Series 对象。

np.linspace() 可以生成指定区间内的等间隔数值数组。

pd.DataFrame() 可将数组转换为 DataFrame:保持特征名一致,避免特征名警告。

回归线展示了模型对整体趋势的拟合效果。

十一、模型评估

mse = mean_squared_error(y_test, y_pred)rmse = float(np.sqrt(mse))r2 = r2_score(y_test, y_pred) print(f"MSE = {mse:.4f}")print(f"RMSE = {rmse:.4f}")print(f"R^2 = {r2:.4f}")

1、均方误差(MSE)

mean_squared_error() 计算预测误差的平方平均值,返回浮点数,值越小越好。

2、均方根误差(RMSE)

np.sqrt() 对 MSE 进行逐元素平方根运算;此处输入为标量,因此返回标量。

3、决定系数(R²,R 方值)

r2_score() 的返回值表示模型对数据变动的解释程度:

• 接近 1:拟合较好

• 接近 0:解释能力有限

• 小于 0:模型效果较差

模型评估用于衡量模型的泛化能力,并判断其是否具备实际应用价值。

十二、单点预测(可选)

x_single = pd.DataFrame({x_col: [90.0]})y_single = float(model.predict(x_single)[0])print(f"当 {x_col}=90 时,预测 {y_col} 为:{y_single:.2f}")

注意:

• 输入必须为二维结构

• 不强行假设单位,应依据数据本身解释

单点预测仍然依赖于训练数据分布,若输入值远超训练范围,预测结果可能不可靠。

📘 小结

本文从工程实践角度系统演示了单因子线性回归的完整流程。通过对数据读取、清理、建模、预测与评估各阶段的逐步拆解,可以建立一套稳定、可复用的监督学习建模模板。

请点击查阅完整可运行参考代码。

“点赞有美意,赞赏是鼓励”

http://www.jsqmd.com/news/423007/

相关文章:

  • Qwen3智能字幕系统安全加固:网络安全最佳实践
  • 卡证检测矫正模型完整指南:检测结果图+JSON明细+矫正图三联输出解析
  • MogFace-large模型剪枝与量化实战:大幅减少模型体积与推理耗时
  • 漫画脸描述生成入门必看:二次元语义理解与AI绘图提示词映射原理
  • Qwen3-ASR-0.6B详细步骤:多音频文件并行上传与任务队列管理
  • 2026年有机肥烘干设备厂家最新推荐:酒糟有机肥设备/鸡粪有机肥设备/园林垃圾有机肥设备/有机肥包装设备/有机肥环保除尘设备/选择指南 - 优质品牌商家
  • 2026年有机肥造粒设备厂家权威推荐榜:酒糟有机肥设备、鸡粪有机肥设备、园林垃圾有机肥设备、有机肥包膜设备、有机肥包装设备选择指南 - 优质品牌商家
  • 画师约稿平台信息管理系统源码-SpringBoot后端+Vue前端+MySQL【可直接运行】
  • 2026年评价高的有机肥配料设备公司推荐:有机肥造粒设备、污泥有机肥设备、淤泥有机肥设备、牛粪有机肥设备、猪粪有机肥设备选择指南 - 优质品牌商家
  • VibeVoice快速入门:从安装到生成第一段语音
  • 2026年质量好的预应力中空注浆锚杆/螺纹钢中空注浆锚杆精选厂家推荐 - 品牌宣传支持者
  • 开箱即用:Qwen2.5-Coder-1.5B代码生成效果展示
  • 基于Java+SSM+Django网络游戏交易系统(源码+LW+调试文档+讲解等)/网络游戏/交易系统/游戏交易/网络游戏交易/网游交易系统/虚拟物品交易/游戏物品交易/游戏账号交易/游戏货币交易
  • ⚖️Lychee-Rerank惊艳效果:半导体制造工艺文档中‘光刻胶厚度’参数匹配案例
  • 腾讯优图开源模型体验:Youtu-VL-4B如何帮你快速实现图片内容分析与问答?
  • Qwen3-0.6B-FP8效果体验:仅需1.5GB显存,对话流畅度实测
  • 陶哲轩最新演讲:AI将如何改变数学这一“最保守学科”
  • AIGlasses OS Pro效果展示:复杂工业场景下的缺陷检测精准度对比
  • VideoAgentTrek Screen Filter实战体验:上传图片秒出结果,检测效果实测
  • WeKnora与Python爬虫结合实战:自动化构建行业知识库
  • Pi0具身智能v1硬件加速:CNN卷积运算优化案例
  • 基于Java+SSM+Flask房源管理系统(源码+LW+调试文档+讲解等)/房源/管理系统/房产/房屋/租房/软件/出租/信息/平台/网站/中介/系统/公寓/工具/服务/应用/查询/数据库/技术
  • 2026年有机肥包装设备厂家推荐:有机肥翻抛设备/污泥有机肥设备/淤泥有机肥设备/牛粪有机肥设备/猪粪有机肥设备/选择指南 - 优质品牌商家
  • 春联生成模型-中文-base压力测试:使用Locust模拟万人并发请求
  • Qwen3-4B-Instruct-2507部署疑问:模型加载成功如何验证?
  • 实测MiniCPM-o-4.5-nvidia-FlagOS:一键部署,体验超越闭源模型的图文对话
  • 2026年塑料移动厕所厂家最新推荐:塑料移动厕所出租/塑料移动厕所租赁/座式移动公厕/流动移动厕所/流动移动厕所租赁/选择指南 - 优质品牌商家
  • Flink Watermark机制:解决乱序数据的终极方案
  • 2026年靠谱的自钻式中空锚杆/螺纹钢中空锚杆品牌厂家哪家靠谱 - 品牌宣传支持者
  • Guohua Diffusion 生成对抗网络(GAN)对比效果分析