ML:多项式回归的基本原理与实现

news2026/4/29 22:30:00
在机器学习中回归任务关注的是“预测一个连续数值”。当输入特征与目标变量之间的关系近似线性时线性回归往往可以取得不错效果但在很多实际问题中这种关系并不总是一条直线而更可能呈现弯曲、拐点或增长速度变化等非线性特征。例如学习时间与成绩的关系可能在初期提升明显、后期趋于平缓温度与能耗的关系也可能并不是简单的直线变化。此时如果仍强行使用最普通的线性回归就可能出现拟合不足的问题。多项式回归Polynomial Regression正是在这种背景下提出的一种常见方法。它并不是抛弃线性回归而是先把原始特征扩展为多项式特征再使用线性回归进行拟合。因此它既保留了线性模型易于训练的优点又提高了对非线性关系的表达能力。一、多项式回归的基本思想多项式回归的核心思想是如果原始特征与目标变量之间不是简单的线性关系那么可以通过构造更高次的特征项把原本难以用直线表示的关系转换成一个可以由线性模型处理的问题。先看最简单的一元情形。假设只有一个输入特征 x线性回归使用的是这只能表示一条直线。而多项式回归则会进一步引入 x²、x³ 等更高次项使模型可以写成这样模型就不再只能表示直线而可以表示弯曲的函数形态。从直观上看多项式回归做了两件事• 先把原始输入特征扩展为更丰富的多项式特征• 再在这些扩展后的特征上使用线性回归进行拟合因此多项式回归虽然能拟合非线性关系但它在参数形式上依然是线性的。也就是说它仍然属于“对参数线性”的模型。图 1 多项式回归的基本思路二、多项式回归的数学表达1、一元多项式回归当只有一个输入特征时二次多项式回归可以写成三次多项式回归可以写成更一般地d 次多项式回归可写成其中• x 表示输入特征• ŷ 表示模型预测值• w₁, w₂, …, w_d 表示各阶特征项对应的系数• b 表示截距• d 表示多项式的最高次数这个表达式说明模型不再只考虑 x 对结果的线性影响还考虑更高阶项所携带的弯曲趋势信息。一般来说需要先观察数据的形状再去决定选用什么形式的多项式函数来处理问题。比如从数据的散点图观察如果有一个“弯”就可以考虑用二次多项式有两个“弯”可以考虑用三次多项式有三个“弯”则考虑用四次多项式以此类推。2、多特征情形下的多项式扩展当输入不止一个特征时多项式扩展会更复杂。假设原始输入为两个特征 x₁ 和 x₂若构造二次多项式特征则不仅会包含还会包含特征之间的交互项因此二次多项式模型可写成这说明多项式回归不仅能够表示“单个特征的弯曲效应”还能够表示“特征之间共同作用”的交互影响。3、“非线性”与“线性”的关系多项式回归很容易让人误以为它已经完全脱离了线性模型。实际上更准确的理解是它对原始输入的关系可以是非线性的但它对参数仍然是线性的。例如这里虽然出现了 x²看上去不再是直线模型但参数 w₂、w₁、b 仍然是以线性组合的方式进入模型的。这正是多项式回归最重要的思想之一通过特征变换把原始空间中的非线性关系转化为扩展特征空间中的线性回归问题。三、多项式回归如何学习参数模型形式确定之后真正的问题就变成了怎样找到最合适的参数1、预测误差对于一个样本模型给出预测值 ŷ真实值记为 y。两者之间的差异称为误差或残差如果有很多样本就需要一种方式综合所有样本上的误差。2、残差平方和多项式回归在参数学习上与普通线性回归的基本思想是一致的仍然常以最小化残差平方和为目标其中• yᵢ 是第 i 个样本的真实值• ŷᵢ 是第 i 个样本的预测值• n 是样本数这说明多项式回归与线性回归的区别主要不在于“优化目标变了”而在于“输入特征变了”。3、均方误差在实践中常用均方误差Mean Squared ErrorMSE来表示平均误差水平它与 RSS 的优化方向一致但更便于比较不同样本规模下的误差水平。4、本质仍然是最小二乘拟合如果把多项式扩展后的特征重新记作新的输入变量那么多项式回归本质上仍然是在做线性回归。也就是说原始问题看起来是非线性的经过特征扩展后学习过程依然可以使用最小二乘法。这也是为什么在 Scikit-learn 中多项式回归通常由 PolynomialFeatures 和 LinearRegression 这两个对象组合完成。四、多项式特征扩展的含义1、为什么要扩展特征普通线性回归只能学习“特征的线性加权组合”。如果真实关系具有弯曲趋势那么仅靠原始特征可能无法表达这种变化。此时增加多项式项的意义就在于• 让模型具有更强的表达能力• 让原本无法表示的曲线关系变得可拟合例如在一元情况下即一个特征可能扩展为三个特征。在二元情况下即两个特征可能扩展为五个特征。这种扩展并不是随意增加复杂度而是在尝试把问题表示得更接近真实规律。2、次数越高模型越灵活多项式次数越高模型能表示的曲线形态通常越复杂。例如• 一次多项式对应直线• 二次多项式可以表示抛物线• 三次多项式可以表示带拐点的曲线• 更高次的多项式则可以表示更复杂的弯曲形状这意味着多项式次数的提高会增强模型拟合能力但同时也会提高过拟合风险。3、特征数会迅速增加多项式回归虽然强大但也有一个非常现实的问题特征扩展后维度可能迅速膨胀。例如原始特征不多时二次或三次扩展还比较容易控制但当原始特征数较多时多项式项和交互项会显著增加模型复杂度也会迅速提高。因此多项式回归并不是“次数越高越好”而是需要在表达能力与泛化能力之间进行权衡。延伸阅读《AI 术语通俗词典扩展多项式特征》五、模型参数的解释多项式回归依然保留了一定的可解释性但这种解释比普通线性回归更需要谨慎。1、系数的含义在多项式回归中每个系数对应的是某一个多项式特征项的影响。例如这里• w₁ 表示一次项的影响• w₂ 表示二次项的影响如果 w₂ 不为零就说明目标变量与输入之间不仅存在线性趋势还存在曲率变化。2、交互项的含义在多特征情形下交互项系数反映的是“某个特征的影响会不会随着另一个特征变化而变化”。例如若该项系数较显著则说明 x₁ 与 x₂ 对目标值并不是彼此独立地起作用而可能存在联合影响。3、解释性会随复杂度下降虽然多项式回归仍然能查看系数但随着特征项和交互项不断增加参数解释会变得越来越困难。这也是为什么多项式回归常常介于“简单可解释模型”和“复杂非线性模型”之间它比普通线性回归更灵活但解释性通常会有所下降。六、Python 实现一元多项式回归示例下面用一个简单示例说明多项式回归的基本实现方式。这里仍然使用一元输入并构造一个近似二次关系的数据再通过 PolynomialFeatures 和 LinearRegression 完成拟合。PolynomialFeatures 根据输入特征的数量和指定的 degree 参数来生成特征。import numpy as npimport matplotlib.pyplot as plt from sklearn.preprocessing import PolynomialFeaturesfrom sklearn.linear_model import LinearRegressionfrom sklearn.pipeline import make_pipelinefrom sklearn.model_selection import train_test_split # 根据操作系统选择中文字体二选一取消注释对应行plt.rcParams[font.sans-serif] [Microsoft YaHei] # Windows# plt.rcParams[font.sans-serif] [PingFang SC] # macOSplt.rcParams[axes.unicode_minus] False # 解决负号显示为方块的问题 # 1. 构造一元非线性数据 rng np.random.RandomState(42) # 创建随机数生成器固定种子42保证结果可复现X np.linspace(-3, 3, 120).reshape(-1, 1) # 生成120个在[-3,3]上均匀分布的点并reshape为列向量# 生成二次函数数据y 0.8*x^2 1.5*x 2 噪声# rng.normal(0, 1.5, size120) 生成120个均值为0、标准差为1.5的正态分布噪声y 0.8 * X[:, 0]**2 1.5 * X[:, 0] 2 rng.normal(0, 1.5, size120) # 2. 划分训练集和测试集 # train_test_split: 将数据集随机划分为训练集和测试集# 参数说明:# X, y - 特征矩阵和目标向量# test_size0.2 - 测试集所占比例20% 的数据用于测试80% 用于训练# random_state42 - 随机种子保证每次划分方式一致# 返回值:# X_train, X_test - 训练集特征、测试集特征# y_train, y_test - 训练集目标、测试集目标X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42) # 3. 构造二次多项式回归模型 # make_pipeline: 创建一个管道将多个数据处理步骤串联起来# 作用: 先对数据进行多项式特征转换再进行线性回归# 等价于: Pipeline([(polynomialfeatures, PolynomialFeatures(...)), (linearregression, LinearRegression())])## PolynomialFeatures(degree2, include_biasFalse) - 多项式特征生成器# 参数说明:# degree2 - 多项式的最高次数这里生成 x, x^2 两个特征# include_biasFalse - 是否包含偏置列1列。False表示不添加常数项相当于截距由后续的LinearRegression负责# True会添加一列全1配合LinearRegression(fit_interceptFalse)使用# 其他常用参数:# interaction_onlyFalse - 是否只生成交互项不生成平方项等# orderC - 输出数组的存储顺序C风格或F风格## LinearRegression() - 线性回归模型在多项式特征上做线性回归实际实现了多项式回归# 参数说明:# fit_interceptTrue - 是否计算截距默认True管道中通常保留True因为PolynomialFeatures设置了include_biasFalse# copy_XTrue - 是否复制特征矩阵# n_jobsNone - 并行计算使用的CPU核心数model make_pipeline( PolynomialFeatures(degree2, include_biasFalse), LinearRegression()) # 4. 训练模型 # fit: 训练管道模型。内部自动对 PolynomialFeatures 调用 fit_transform()先学习特征维度再转换数据# 处理流程:# 1. 管道自动将X_train传递给PolynomialFeatures生成多项式特征x, x^2# 2. 然后将生成的特征传递给LinearRegression进行训练# 参数:# X_train - 原始特征一维转换为二维形状 [n_samples, 1]# y_train - 目标值形状 [n_samples]model.fit(X_train, y_train) # 5. 预测 # predict: 使用训练好的管道进行预测# 处理流程:# 1. 自动将X_test通过PolynomialFeatures转换生成x, x^2# 2. 再用训练好的LinearRegression进行预测# 参数:# X_test - 测试集特征形状 [n_samples, 1]# 返回值: 预测的目标值数组y_pred model.predict(X_test) # 6. 为绘图准备平滑曲线 # 生成300个更密集的点用于绘制平滑的回归曲线X_plot np.linspace(-3, 3, 300).reshape(-1, 1) # 在[-3,3]上生成300个点y_plot model.predict(X_plot) # 预测这些点的值得到平滑曲线 # 7. 可视化 plt.figure(figsize(8, 5)) # 创建画布大小为宽8英寸、高5英寸plt.scatter(X_train, y_train, label训练样本) # 绘制训练集散点图plt.scatter(X_test, y_test, label测试样本) # 绘制测试集散点图plt.plot(X_plot, y_plot, linewidth2, label多项式回归曲线) # 绘制回归曲线plt.xlabel(特征值) # x轴标签plt.ylabel(目标值) # y轴标签plt.title(一元多项式回归示例) # 图表标题plt.legend() # 显示图例plt.show() # 显示图像输出示意图这段代码展示了多项式回归的基本工作流1、构造或加载数据2、划分训练集与测试集3、用 PolynomialFeatures 扩展特征4、用 LinearRegression 拟合模型5、做预测并可视化结果与普通线性回归相比最重要的变化就是多了一步特征扩展。七、Python 实现多特征多项式回归示例下面再给出一个多特征示例帮助理解交互项和高阶项的引入方式。import numpy as npfrom sklearn.preprocessing import PolynomialFeaturesfrom sklearn.linear_model import LinearRegressionfrom sklearn.pipeline import make_pipelinefrom sklearn.model_selection import train_test_split # 1. 构造二维输入数据rng np.random.RandomState(42) # 固定随机种子保证可复现X rng.uniform(-2, 2, size(200, 2)) # 生成200个样本每个样本有2个特征取值范围[-2, 2]x1 X[:, 0] # 第一个特征x2 X[:, 1] # 第二个特征 # 2. 构造带交互项的目标# y 3*x1² 2*x1*x2 - 1.5*x2² 4*x1 噪声均值为0标准差1.0y 3 * x1**2 2 * x1 * x2 - 1.5 * x2**2 4 * x1 rng.normal(0, 1.0, size200) # 3. 划分训练集(80%)与测试集(20%)X_train, X_test, y_train, y_test train_test_split( X, y, test_size0.2, random_state42) # 4. 构造模型二次多项式生成 x1, x2, x1², x1x2, x2² 线性回归model make_pipeline( PolynomialFeatures(degree2, include_biasFalse), # 生成所有2次及以下的特征组合不含常数项 LinearRegression() # 拟合多项式系数) # 5. 训练模型内部自动对 PolynomialFeatures 调用 fit_transformmodel.fit(X_train, y_train) # 6. 查看测试集上的部分预测结果y_pred model.predict(X_test) # 对测试集预测 # 打印前5个样本的真实值与预测值对比for i in range(5): print(f真实值: {y_test[i]:.2f} 预测值: {y_pred[i]:.2f})这个示例表明在多特征情形下多项式回归不仅能学习平方项也能学习交互项从而更好地描述多个变量共同作用的关系。八、多项式回归适用场景与主要局限1、适用场景多项式回归较适合以下情况• 目标是连续数值• 原始特征与目标之间存在明显的非线性趋势• 希望在保持模型相对简单的同时提高拟合能力• 希望通过特征工程扩展线性模型的表达能力在很多任务中多项式回归可以看作普通线性回归的自然扩展也是从简单线性模型走向更复杂非线性建模的重要过渡。2、主要局限多项式回归虽然比普通线性回归更灵活但也存在明显局限。• 容易过拟合次数过高时模型可能过度贴合训练数据• 特征维度膨胀原始特征较多时多项式项数量会迅速增加• 对异常值仍较敏感如果后端仍使用普通最小二乘那么平方误差的敏感性仍然存在• 解释性下降高阶项与交互项增多后参数意义会变得更难直观理解图 2 多项式次数与模型复杂度的关系 小结多项式回归通过特征扩展把原始空间中的非线性关系转化为扩展特征空间中的线性回归问题。它是线性回归的重要延伸也是理解特征工程、模型复杂度与过拟合风险的重要入口。“点赞有美意赞赏是鼓励”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2551952.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…