机器学习——多项式回归算法

机器学习------多项式回归算法

1. 算法概述

1.1 基本概念

多项式回归(Polynomial Regression)是线性回归的扩展形式,通过引入自变量的高次项来建模非线性关系。其核心思想是通过增加多项式特征,使线性模型能够拟合复杂的曲线数据。

与线性回归的关系:

  • 本质仍是线性模型,因为权重参数\\beta是线性的

  • 特征空间从一维扩展到高维,如:

x \\rightarrow \[x, x\^2, x\^3\]

1.2 数学形式

标准多项式回归模型:

y = \\beta_0 + \\beta_1x + \\beta_2x\^2 + \\cdots + \\beta_nx\^n + \\epsilon

其中:

  • n为多项式度数(Degree)

  • \\epsilon为误差项

  • \\beta_i为待求系数

2. 算法原理

2.1 模型构建流程

  1. 特征扩展:将原始特征x转换为多项式特征矩阵

X_{poly} = \[1, x, x\^2, ..., x\^n\]

  1. 参数估计:使用最小二乘法求解最优系数\\beta

  2. 模型评估:通过MSE、R²等指标评估拟合效果

2.2 损失函数

采用均方误差(MSE)作为损失函数:

MSE = \\frac{1}{n}\\sum_{i=1}\^{n}(y_i - \\hat{y_i})\^2

梯度下降更新公式:

\\begin{aligned} dw \&= \\frac{2}{n}X\^T(\\hat{y} - y) \\\\ db \&= \\frac{2}{n}\\sum(\\hat{y} - y) \\end{aligned}

2.3 参数估计方法

方法1:正规方程 ,原理:解析解:

\\beta = (X\^TX)\^{-1}X\^Ty

适用场景:小规模数据(特征数<10000) 方法2:梯度下降, 原理:迭代更新参数:

\\beta_j := \\beta_j - \\alpha\\frac{\\partial}{\\partial\\beta_j}J(\\beta)

适用场景:大规模数据/高维特征 方法3:SVD分解 , 原理:解决矩阵不可逆问题:

\\beta = V\\Sigma\^{-1}U\^Ty

适用场景:病态矩阵处理

3. 关键技术实现

3.1 特征工程

使用PolynomialFeatures生成多项式特征:

复制代码
from sklearn.preprocessing import PolynomialFeatures
​
poly = PolynomialFeatures(degree=3)
X_poly = poly.fit_transform(X)

生成结果示例(degree=2):

复制代码
原始特征: [[2], [3]] → 转换后: [[1, 2, 4], [1, 3, 9]]

3.2 正则化处理

为防止过拟合,可引入正则化项:

  • L2正则化(岭回归):损失函数+\\lambda\\sum\\beta_i\^2

  • L1正则化(Lasso):损失函数+\\lambda\\sum\|\\beta_i\|

  • ElasticNet:结合L1和L2正则化

3.3 模型评估指标

指标1:MSE

公式:

\\frac{1}{n}\\sum\\_{i=1}\^n (y\\_i - \\hat{y}\\_i)\^2

特点:明确求和范围

指标2:R²

公式:

1 - \\frac{SS\\_{res}}{SS\\_{tot}}

特点:标准化写法

指标3:Adjusted R²

公式:

1 - (1-R\^2)\\frac{n-1}{n-p-1}

特点:完整表达式

4. 完整代码示例

4.1 使用Numpy实现

复制代码
import numpy as np
import matplotlib.pyplot as plt
​
# 生成非线性数据
np.random.seed(42)
X = 6 * np.random.rand(100, 1) - 3
y = 0.5 * X**2 + X + 2 + np.random.randn(100, 1)
​
# 多项式特征转换
def poly_features(X, degree):
    X_poly = np.ones((len(X), degree+1))
    for i in range(1, degree+1):
        X_poly[:,i] = X[:,0]**i
    return X_poly
​
# 梯度下降优化
def gradient_descent(X, y, lr=0.01, epochs=1000):
    w = np.random.randn(X.shape[1], 1)
    b = np.random.randn()
    for epoch in range(epochs):
        y_pred = X.dot(w) + b
        dw = (2/len(y)) * X.T.dot(y_pred - y)
        db = (2/len(y)) * np.sum(y_pred - y)
        w -= lr * dw
        b -= lr * db
    return w, b
​
# 训练二次多项式模型
X_poly = poly_features(X, 2)
w, b = gradient_descent(X_poly, y)
​
# 可视化结果
plt.scatter(X, y)
plt.plot(np.sort(X, axis=0), (X_poly.dot(w)+b)[np.argsort(X[:,0])], 'r-')
plt.show()

4.2 使用Scikit-learn实现

复制代码
from sklearn.pipeline import Pipeline
from sklearn.metrics import mean_squared_error
​
# 构建管道
model = Pipeline([
    ('poly', PolynomialFeatures(degree=4)),
    ('reg', LinearRegression())
])
​
# 拟合模型
model.fit(X, y)
​
# 评估模型
y_pred = model.predict(X)
mse = mean_squared_error(y, y_pred)
print(f"MSE: {mse:.4f}")

5. 实际案例:员工薪资预测

5.1 数据集特征

职位等级 薪资(万美元)
1 4.5
2 5.5
... ...
10 99.0

5.2 不同度数对比

复制代码
degrees = [1, 2, 3, 4]
plt.figure(figsize=(12,8))
plt.scatter(X, y)
​
for d in degrees:
    poly = PolynomialFeatures(degree=d)
    X_poly = poly.fit_transform(X)
    lr = LinearRegression().fit(X_poly, y)
    plt.plot(X, lr.predict(X_poly), label=f'degree {d}')
​
plt.legend()
plt.show()

结果分析:

  • degree=1:线性拟合(R²=0.669)

  • degree=4:完美拟合但存在过拟合风险

  • degree=2/3:最佳平衡点

6. 算法优化方向

6.1 过拟合处理策略

  1. 交叉验证选择最佳度数

  2. 引入正则化项(L1/L2)

  3. 早停法(Early Stopping)

  4. 增加训练数据量

6.2 计算优化

技术 实现方式 效果
特征缩放 对多项式特征标准化 加速梯度下降收敛
增量学习 分批处理大数据 降低内存消耗
GPU加速 使用CUDA并行计算 提升10-100倍速度

7. 应用场景与限制

7.1 适用场景

  • 物理/经济学中的非线性关系建模(如价格-销量曲线)

  • 传感器数据校准(温度-电阻特性)

  • 时间序列趋势预测

7.2 局限性

  1. 高次项易导致过拟合

  2. 外推预测能力差

  3. 计算复杂度随度数指数增长

  4. 对异常值敏感

8. 扩展阅读

相关推荐
乱世刀疤3 分钟前
AI绘画软件Stable Diffusion详解教程(3):Windows系统本地化部署操作方法(通用版)
人工智能·ai作画·stable diffusion
游王子9 分钟前
OpenCV(12):图像拼接、简单滤镜效果
人工智能·opencv·计算机视觉
化作星辰22 分钟前
神经网络中的Adam
人工智能·深度学习·神经网络
做怪小疯子25 分钟前
论文阅读:A comprehensive survey on model compression and acceleration
论文阅读·人工智能·深度学习
atbigapp.com32 分钟前
AI数据分析:用DeepSeek做数据清洗
人工智能·数据挖掘·数据分析·prompt·deepseek
白白糖33 分钟前
Opencv 图像形态学操作
人工智能·opencv·计算机视觉
三月七(爱看动漫的程序员)41 分钟前
Prompt Engineering for Large Language Models
前端·javascript·人工智能·语言模型·自然语言处理·pdf·prompt
花千树-01042 分钟前
微调训练方法概述:Fine-tuning、Prompt-tuning、P-tuning 及其他高效技术
人工智能·机器学习·chatgpt·prompt·aigc·embedding
匹马夕阳1 小时前
在VSCode中使用MarsCode AI最新版本详解
ide·人工智能·vscode
深圳启明云端科技1 小时前
AI语音交互模组方案,设备无线物联网控制,实时语音联动应用
人工智能·物联网·esp32·模块·ai语音交互·芯片模组