多项式回归属于监督学习回归算法,本质是线性回归的一种扩展。它通过把原始特征生成高次多项式特征,将非线性数据映射到高维空间,再用线性回归拟合,从而捕捉曲线关系。

1. 基本公式
一元多项式回归:
- :原始输入特征
- :构造出来的多项式新特征
- 就是偏置
关键点:虽然最终拟合出来是曲线,但对构造后的多项式特征来说,模型依然是线性的,所以仍然可以使用线性回归求解。
2. 核心原理
原始数据如果是曲线,直接用一元线性回归会欠拟合。
我们不改变线性回归算法,而是新增特征:把 扩展成 ,再送入线性回归训练。
这个过程由 PolynomialFeatures 自动完成。
3. 损失函数
依然使用均方误差 MSE:
目标:最小化预测值与真实值的平方误差。
4. 优缺点
✅ 优点
- 可以拟合非线性曲线,解决普通线性回归无法拟合的场景
- 底层复用线性回归,实现简单、训练快
- 低阶多项式可解释性较好
❌ 缺点
- 阶数越高,越容易过拟合
- 高阶多项式对异常值非常敏感
- 特征爆炸:阶数升高后,特征数量快速变多
- 只适合单变量或少量特征,多特征时多项式组合会急剧膨胀
5. Python 代码示例
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.model_selection import train_test_split
from sklearn.metrics import mean_squared_error
np.random.seed(42)
# 原始特征
x = np.linspace(-3, 3, 50).reshape(-1, 1)
# 真实曲线 y = 0.5*x² + 噪声
y = 0.5 * (x ** 2) + np.random.normal(0, 0.3, size=x.shape)
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=42)
# 生成3阶多项式特征
poly = PolynomialFeatures(degree=3)
X_train_poly = poly.fit_transform(X_train)
X_test_poly = poly.transform(X_test)
# 训练线性回归模型
model = LinearRegression()
model.fit(X_train_poly, y_train)
# 输出参数
print(f"w0(b) = {model.intercept_.item():.2f}")
print(f"w1 = {model.coef_[0][1].item():.2f}")
print(f"w2 = {model.coef_[0][2].item():.2f}")
print(f"w3 = {model.coef_[0][3].item():.2f}")
# 预测评估
y_pred = model.predict(X_test_poly)
mse = mean_squared_error(y_test, y_pred)
print(f"测试集 MSE:{mse:.2f}")
# 绘图
x_line = np.linspace(-3, 3, 100).reshape(-1,1)
y_line = model.predict(poly.transform(x_line))
plt.scatter(X_train, y_train, c="#4472c4", label="训练样本")
plt.plot(x_line, y_line, c="#ed7d31", lw=2, label="多项式拟合曲线")
plt.xlabel("x")
plt.ylabel("y")
plt.legend()
plt.show()

说明:
PolynomialFeatures(degree=N)用来自动生成0次、1次、2次…N次特征;阶数不是越高越好。
6. 阶数选择与过拟合
- degree=1:等价普通线性回归,容易欠拟合
- degree=2~3:适合平缓曲线,泛化能力较好
- degree ≥ 8:极易过拟合,曲线剧烈抖动,在新数据上效果差
这也是前面《过拟合、欠拟合、偏差与方差》教程里经典的演示案例。
7. 适用场景
- 单变量呈现平滑曲线变化:温度随时间变化、能耗曲线、产量曲线
- 小样本、简单非线性关系
- 作为基线模型,快速验证非线性趋势
8. 常见误区
- 多项式回归是非线性模型:模型对参数是线性的,只是对原始x非线性。
- 阶数越高效果越好:高阶极易过拟合。
- 适合很多个特征:多特征下多项式特征组合爆炸,基本不推荐。
思考题
- 当多项式阶数设置过大,会出现什么问题?有哪些缓解办法?
- 多项式回归为什么仍然可以用 LinearRegression 来训练?
0 条笔记