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

使用5阶PolynomialFeatures拟合模型后首预测值远大于真实值如何解决

这个问题本质是高阶多项式拟合的龙格现象,以及普通线性回归无正则约束导致的过拟合问题:5阶多项式在数据区间的边界位置会出现无意义的剧烈震荡,刚好你预测的第一个点落在X取值的左边界,就出现了预测值远大于真实值的情况。

可以通过以下几种方法解决:

  • 降低多项式阶数
    绝大多数场景下2~3阶的多项式就足够拟合数据的非线性趋势,不会出现边界剧烈震荡的问题,直接把degree参数调整为2或3即可,修改后重新拟合就能看到明显改善。
  • 更换为带正则约束的线性回归模型
    普通LinearRegression没有对特征系数做约束,高阶多项式的系数很容易被拟合到过大的数值,进而导致曲线震荡。可以选择带L2正则的Ridge、带L1正则的Lasso或者混合正则的ElasticNet,通过正则项限制系数的大小,示例代码如下:
    from sklearn.linear_model import Ridge
    degree = 3
    X_poly = PolynomialFeatures(degree=degree).fit_transform(X.reshape(-1, 1))
    # alpha为正则强度,数值越大约束越强,可根据拟合效果调整
    ridge_reg = Ridge(alpha=1.0)
    ridge_reg.fit(X_poly, y)
    
  • 对多项式特征做标准化
    不同阶数的多项式特征数值范围差异极大,比如X取值为010时,5阶特征的数值范围可以达到01e5,会大幅干扰线性回归的系数估计。生成多项式特征后先做标准化再拟合,也能有效缓解偏差问题,示例代码如下:
    from sklearn.preprocessing import StandardScaler
    scaler = StandardScaler()
    # 生成多项式特征后做标准化
    X_poly = PolynomialFeatures(degree=5).fit_transform(X.reshape(-1, 1))
    X_poly_scaled = scaler.fit_transform(X_poly)
    lin_reg = LinearRegression()
    lin_reg.fit(X_poly_scaled, y)
    # 预测时需要对新样本的多项式特征做同样的标准化处理
    
  • 补充样本量或者排查异常值
    如果你的训练样本量太少,或者X边界附近的样本存在异常值,也会放大过拟合的影响,补充边界位置的有效样本、剔除异常值也能提升拟合效果。

内容的提问来源于stack exchange,提问作者Tùng Dương Quang

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:36:03