You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何N-1阶多项式回归无法过拟合正弦曲线?

多项式回归过拟合的问题疑惑

我尝试使用多项式回归对正弦曲线进行过拟合。根据我的理解,当拥有N个数据样本且多项式阶数为N-1时,曲线应穿过所有数据点,但在我的示例中并未实现。

我的代码如下:

from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
import numpy as np
import matplotlib.pyplot as plt

N = 50
deg = 49

X = np.linspace(0, 2 * np.pi, N).reshape(-1, 1)
X = np.sort(X, axis=0)
y = np.sin(X) + np.random.randn(N, 1) * 0.2

poly_features = PolynomialFeatures(degree=deg, include_bias=False)

X_poly = poly_features.fit_transform(X)

reg = LinearRegression()
reg.fit(X_poly, y)

y_vals = reg.predict(X_poly)

plt.scatter(X, y)
plt.plot(X, y_vals, color='r')
plt.show()

代码运行结果:
代码运行结果

请问我存在哪些误解?


问题解析

  • 对完美拟合的前提理解有误:只有在数据无噪声且特征矩阵满秩的理想情况下,N-1阶多项式才能严格穿过所有样本点。你给y添加了随机噪声,虽然理论上存在能拟合所有带噪声点的多项式,但实际受数值计算限制无法实现。
  • 高次多项式的数值病态问题:49阶多项式生成的特征矩阵是范德蒙德矩阵,这类矩阵的特征值差距极大(低次项特征值极小,高次项特征值指数级膨胀),属于典型的病态矩阵。LinearRegression采用的最小二乘法在求解病态矩阵时,浮点数的精度误差会被大幅放大,导致无法计算出能完美拟合所有点的系数。
  • 验证方法:如果去掉y的噪声项(改为y = np.sin(X)),重新运行代码会发现模型确实能完美穿过所有样本点,这也验证了噪声+数值稳定性才是问题的核心。

内容的提问来源于stack exchange,提问作者zaig

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 02:44:55