【回归算法】多项式回归详解

多项式回归详解(适合本科/研究生)

多项式回归是回归分析的重要延伸,核心是用曲线(二次、三次等多项式)替代线性回归的直线,来更精准描述数据间的非线性关系,是处理低维平滑非线性数据的经典方法,兼具易理解、易实现的特点。

一、从线性回归到多项式回归:为什么需要多项式回归?

回归分析的核心是从数据中找趋势和规律 ,线性回归是用直线 y = β 0 + β 1 x + ε y=\beta_{0}+\beta_{1} x+\varepsilon y=β0+β1x+ε 描述自变量 x 和因变量 y 的关系,适合数据呈线性变化的场景。

但实际中很多数据的关系是弯曲的、非线性的 (比如一天的气温先升后降、商品销量随价格的非线性变化),如果强行用直线拟合,会出现预测偏差大、拟合效果差的问题,这时候就需要多项式回归来解决。

简单来说:直线不够用,曲线来补位,多项式回归就是在直线的基础上,加入高次项让模型"弯曲",更好地贴合非线性数据。

二、多项式回归的核心思路

在自变量的一次项基础上,加入二次方、三次方甚至更高次项,通过高次项的"弯曲效应",让模型能灵活拟合非线性的数据分析趋势。

  • 比如二次多项式回归: y = β 0 + β 1 x + β 2 x 2 + ε y=\beta_{0}+\beta_{1} x+\beta_{2} x^2+\varepsilon y=β0+β1x+β2x2+ε(拟合单峰/单谷的曲线)
  • 三次多项式回归: y = β 0 + β 1 x + β 2 x 2 + β 3 x 3 + ε y=\beta_{0}+\beta_{1} x+\beta_{2} x^2+\beta_{3} x^3+\varepsilon y=β0+β1x+β2x2+β3x3+ε(拟合更复杂的曲线)

关键注意点 :多项式回归虽然包含自变量的高次项,但对模型参数 β 0 、 β 1 . . . β d \beta_0、\beta_1...\beta_d β0、β1...βd 来说仍然是线性的,因此可以用线性回归的求解思路来计算参数,这是多项式回归的核心特性。

三、多项式回归的数学原理

1. 模型的基本数学形式

多项式回归的通用表达式为:
y = β 0 + β 1 x + β 2 x 2 + ⋯ + β d x d + ε y=\beta_{0}+\beta_{1} x+\beta_{2} x^{2}+\cdots+\beta_{d} x^{d}+\varepsilon y=β0+β1x+β2x2+⋯+βdxd+ε

  • d:多项式的阶数(比如d=2是二次回归,d=3是三次回归)
  • β 0 , β 1 , . . . , β d \beta_{0},\beta_{1},...,\beta_{d} β0,β1,...,βd:模型待估计的参数
  • ε \varepsilon ε:模型的误差项(表示数据的随机波动)

2. 构造设计矩阵与目标函数

假设有n个样本 ( x i , y i ) ( i = 1 , 2 , . . . , n ) (x_{i}, y_{i})(i=1,2, ..., n) (xi,yi)(i=1,2,...,n),为了方便求解参数,需要构造设计矩阵(X)参数向量 β \beta β目标向量(y)
X = ( 1 x 1 x 1 2 ⋯ x 1 d 1 x 2 x 2 2 ⋯ x 2 d ⋮ ⋮ ⋮ ⋱ ⋮ 1 x n x n 2 ⋯ x n d ) β = ( β 0 β 1 ⋮ β d ) y = ( y 1 y 2 ⋮ y n ) X=\left(\begin{array}{ccccc} 1 & x_{1} & x_{1}^{2} & \cdots & x_{1}^{d} \\ 1 & x_{2} & x_{2}^{2} & \cdots & x_{2}^{d} \\ \vdots & \vdots & \vdots & \ddots & \vdots \\ 1 & x_{n} & x_{n}^{2} & \cdots & x_{n}^{d}\end{array}\right) \quad \beta=\left(\begin{array}{c} \beta_{0} \\ \beta_{1} \\ \vdots \\ \beta_{d} \end{array}\right) \quad y=\left(\begin{array}{c} y_{1} \\ y_{2} \\ \vdots \\ y_{n} \end{array}\right) X= 11⋮1x1x2⋮xnx12x22⋮xn2⋯⋯⋱⋯x1dx2d⋮xnd β= β0β1⋮βd y= y1y2⋮yn

模型可简化为矩阵形式: y = X β + ε y=X \beta+\varepsilon y=Xβ+ε

为了找到最优的参数 β \beta β,多项式回归采用最小二乘法 ,核心是让残差平方和最小 (残差=真实值-模型预测值),构造的损失函数为:
J ( β ) = ∑ i = 1 n ( y i − y ^ i ) 2 = ∥ y − X β ∥ 2 J(\beta)=\sum_{i=1}^{n}\left(y_{i}-\hat{y}_{i}\right)^{2}=\| y-X \beta\| ^{2} J(β)=∑i=1n(yi−y^i)2=∥y−Xβ∥2
y ^ i \hat{y}_i y^i是模型对第(i)个样本的预测值。

3. 最小二乘估计:求解最优参数

求解损失函数最小值的核心是求导并令梯度为0,推导过程如下:

  1. 将损失函数转化为矩阵形式: J ( β ) = ( y − X β ) T ( y − X β ) J(\beta)=(y-X \beta)^{T}(y-X \beta) J(β)=(y−Xβ)T(y−Xβ)
  2. 对参数 β \beta β求偏导: ∂ J ∂ β = − 2 X T ( y − X β ) \frac{\partial J}{\partial \beta}=-2 X^{T}(y-X \beta) ∂β∂J=−2XT(y−Xβ)
  3. 令偏导为0(梯度为0时损失函数最小),得到正规方程 : X T X β = X T y X^{T} X \beta=X^{T} y XTXβ=XTy
  4. 若 X T X X^{T} X XTX可逆,即可解出最优参数: β = ( X T X ) − 1 X T y \beta=\left(X^{T} X\right)^{-1} X^{T} y β=(XTX)−1XTy

注意问题 :如果多项式阶数过高,设计矩阵(X)的列会出现多重共线性 (列之间高度相关),导致 X T X X^{T} X XTX难以求逆甚至不可逆,此时需要用正则化 (如岭回归)或 数值优化(如梯度下降)来解决。

4. 多项式回归的完整算法流程

多项式回归的实现分为数据预处理、特征扩展、模型求解、模型评估、模型调优5个步骤,每一步的核心操作清晰可落地:

(1)数据预处理
  • 数据收集:获取n个样本 ( x i , y i ) (x_{i}, y_{i}) (xi,yi);
  • 数据清洗:处理缺失值、异常值,保证数据的有效性(比如剔除明显偏离整体趋势的离群点)。
(2)特征扩展(核心步骤)
  • 对每个自变量 x i x_i xi,生成多项式特征: [ 1 , x i , x i 2 , . . . , x i d ] [1, x_{i}, x_{i}^{2}, ..., x_{i}^{d}] [1,xi,xi2,...,xid]("1"对应常数项 β 0 \beta_0 β0);
  • 按样本排列构造设计矩阵X(一行一个样本,一列一个多项式项)。
(3)模型求解
  • 构造损失函数: J ( β ) = ∥ y − X β ∥ 2 J(\beta)=\|y-X \beta\|^{2} J(β)=∥y−Xβ∥2;
  • 求解正规方程得到参数 β \beta β;若 X T X X^{T} X XTX不可逆,改用梯度下降或岭回归/套索回归(Lasso)。
(4)模型评估

通过3类方法验证模型效果,同时防止过拟合:

  • 残差分析:计算残差 y i − y ^ i y_{i}-\hat{y}_{i} yi−y^i,分析残差的分布(若残差随机分布,说明模型拟合效果好);
  • 性能指标:用均方误差(MSE)决定系数 R 2 R^2 R2 衡量(MSE越小、 R 2 R^2 R2越接近1,拟合效果越好);
  • 交叉验证:将数据分割为训练集/验证集,用验证集测试模型,避免模型只"记住"训练数据。
(5)模型调优(关键:平衡拟合效果和泛化能力)
  • 选择最优阶数(d):通过验证集/交叉验证选择,阶数过高易过拟合,过低易欠拟合;
  • 加入正则化:过拟合时用岭回归、Lasso回归约束参数,降低模型复杂度;
  • 特征缩放:对自变量做归一化/标准化,解决高次项导致的数值计算不稳定问题。

四、多项式回归实战案例(Python代码)

拟合带噪声的正弦曲线 为例,结合岭回归正则化 防止过拟合,通过网格搜索自动选择最优的多项式阶数和正则化参数,全程用Python实现,代码注释清晰,可直接运行。

1. 案例思路

  • 生成非线性数据集:基于 y = s i n ( x ) y=sin(x) y=sin(x)生成数据,并加入正态分布噪声模拟真实场景;
  • 模型构建:用Pipeline整合"多项式特征扩展+岭回归",简化建模流程;
  • 超参数优化:网格搜索遍历多项式阶数(1-8)和正则化系数(0.001-100),5折交叉验证选最优;
  • 模型评估:计算测试集的MSE和 R 2 R^2 R2,可视化训练/测试数据和模型预测曲线。

2. 完整可运行代码

python 复制代码
import numpy as np
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import Ridge
from sklearn.pipeline import make_pipeline
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.metrics import mean_squared_error, r2_score

# 1. 数据生成与预处理
np.random.seed(42)  # 设置随机种子,保证结果可复现
X = np.sort(5 * np.random.rand(800, 1), axis=0)  # 生成800个[0,5]的自变量,升序排列
y = np.sin(X).ravel() + np.random.normal(scale=0.3, size=X.shape[0])  # 生成因变量+噪声
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)  # 划分训练集(80%)/测试集(20%)

# 2. 构建模型+网格搜索优化超参数
# Pipeline整合:多项式特征扩展 → 岭回归(避免手动步骤,防止数据泄露)
pipeline = make_pipeline(PolynomialFeatures(include_bias=False), Ridge())
# 定义参数网格:遍历多项式阶数和正则化系数
param_grid = {
    'polynomialfeatures__degree': [1, 2, 3, 4, 5, 6, 7, 8],
    'ridge__alpha': [0.001, 0.01, 0.1, 1, 10, 100]
}
# 5折交叉验证的网格搜索,以负MSE为评分标准
grid = GridSearchCV(pipeline, param_grid, cv=5, scoring='neg_mean_squared_error')
grid.fit(X_train, y_train)  # 训练模型

# 3. 输出最优参数和模型评估指标
print("最佳超参数组合:", grid.best_params_)
print("最佳交叉验证MSE:", -grid.best_score_)  # 负MSE转正
y_pred = grid.predict(X_test)  # 测试集预测
print("测试集MSE:", mean_squared_error(y_test, y_pred))
print("测试集R2得分:", r2_score(y_test, y_pred))

# 4. 可视化结果:训练数据+测试数据+预测曲线
plt.figure(figsize=(10, 6))
plt.scatter(X_train, y_train, color='blue', label='训练数据', alpha=0.7)  # 训练集散点
plt.scatter(X_test, y_test, color='red', label='测试数据', alpha=0.7)    # 测试集散点
# 生成平滑的预测曲线
X_plot = np.linspace(X.min(), X.max(), 100).reshape(-1, 1)
y_plot = grid.predict(X_plot)
plt.plot(X_plot, y_plot, color='green', linewidth=2, label='模型预测曲线')
# 图表设置
plt.title("多项式回归+岭回归正则化拟合效果", fontsize=14)
plt.xlabel("自变量X", fontsize=12)
plt.ylabel("因变量y", fontsize=12)
plt.legend(fontsize=12)
plt.show()

3. 案例结果说明

运行代码后,会得到最优的多项式阶数岭回归正则化系数,同时输出模型的MSE和(R^2),并可视化拟合曲线:

  • 绿色曲线会紧密贴合正弦曲线的趋势,同时不会过度拟合噪声;
  • 测试集 R 2 R^2 R2越接近1,说明模型的泛化能力越好。

五、多项式回归的优缺点

多项式回归是经典的非线性回归方法,优势和局限性都很明显,学习和使用时需要重点关注过拟合问题,具体如下:

优点 缺点
模型结构简单,原理易理解、结果易解释 高阶多项式易过拟合:训练集效果极好,新数据预测误差大
能有效捕捉平滑的非线性关系,拟合效果好 数值不稳定:高次项会导致设计矩阵条件数变大,参数求解易出问题
低阶多项式计算效率高,训练速度快 参数调优繁琐:需要反复选择阶数和正则化参数,平衡偏差和方差
灵活性强:调整阶数即可适配不同程度的非线性趋势 维度扩展有限:对高维数据、复杂特征交互的捕捉能力弱

六、多项式回归与其他非线性回归算法的对比

实际建模中,需要根据数据特性、场景需求选择算法,以下将多项式回归与SVR、决策树回归、神经网络回归做对比,明确各算法的适用场景,方便选型:

算法 核心优点 核心缺点 适用场景
多项式回归 1. 模型简单、易解释; 2. 低维下拟合平滑非线性效果好; 3. 计算效率高 1. 高阶易过拟合; 2. 数值计算不稳定; 3. 高维数据拟合能力弱 数据维度低、非线性趋势平滑; 对模型可解释性要求高的场景(如简单的数据分析、本科/研究生实验)
支持向量机回归(SVR) 1. 核函数能捕捉复杂非线性关系 ; 2. 对异常值有一定鲁棒性 1. 参数调优复杂(核函数、惩罚因子等); 2. 大规模数据计算成本高 中小规模数据、需要捕捉复杂非线性,但数据量有限的场景
决策树回归 1. 无需假设数据分布,适配任意非线性; 2. 能捕捉特征的复杂交互; 3. 模型结构直观 1. 单棵树极易过拟合; 2. 对噪声敏感; 3. 连续值预测稳定性差 特征间有复杂、非连续的关系; 可通过随机森林/GBDT集成提升稳定性
神经网络回归 1. 非线性拟合能力极强 ; 2. 适配高维、大数据、复杂模式; 3. 可挖掘深层特征关系 1. 需要大量数据训练; 2. 调参复杂、训练时间长; 3. 黑盒模型,几乎无解释性 数据量充足、特征维度高; 对精度要求高,不要求解释性的场景(如工业建模、深度学习应用)

算法选型核心原则

  1. 优先选多项式回归:数据维度低(单特征/少特征)、非线性趋势平滑,且需要模型可解释的场景(比如课程实验、简单的数据分析建模),通过合理选阶数+正则化,能在拟合效果和泛化能力间取得平衡;
  2. 考虑其他算法:数据量/维度高、非线性关系复杂(如局部突变、特征强交互),或对精度要求远高于解释性时,选择SVR、决策树集成、神经网络。

七、核心总结

  1. 多项式回归是线性回归的非线性延伸,通过加入自变量高次项实现曲线拟合,对参数仍为线性,可复用线性回归的求解方法;
  2. 核心问题是阶数选择过拟合,解决方法为交叉验证选阶数+正则化(岭回归/Lasso)+特征缩放;
  3. 多项式回归的核心优势是简单、易解释,适合低维、平滑非线性的数据场景,是本科/研究生学习非线性回归的入门经典方法;
  4. 实际建模中,需结合数据特性和场景需求选择算法,不盲目追求复杂模型,简单模型能解决的问题,无需用复杂模型
相关推荐
Frostnova丶2 小时前
LeetCode 761. 特殊的二进制字符串
算法·leetcode
不吃橘子的橘猫2 小时前
《集成电路设计》复习资料3(电路模拟与SPICE)
学习·算法·集成电路·仿真·半导体
m0_531237172 小时前
C语言-函数递归
算法
mjhcsp2 小时前
C++Z 函数超详细解析
c++·算法·z 函数
近津薪荼3 小时前
dfs专题9——找出所有子集的异或总和再求和
算法·深度优先
52Hz1183 小时前
力扣131.分割回文串、35.搜索插入位置、74.搜索二维矩阵、34.在排序数组中查找...
python·算法·leetcode
Tisfy3 小时前
LeetCode 761.特殊的二进制字符串:分治(左右括号对移动)
算法·leetcode·字符串·递归·分治
小O的算法实验室3 小时前
2025年AEI SCI1区TOP,面向城市区域监视的任务驱动多无人机路径规划三阶段优化策略,深度解析+性能实测
算法·论文复现·智能算法·智能算法改进
癫狂的兔子3 小时前
【Python】【机器学习】集成算法(随机森林、提升算法)
python·算法·机器学习