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

如何获取可用于手动计算的多项式回归模型系数?

问题描述

拥有大量数据点,希望提取多项式回归的系数后手动计算预测值(而非直接调用model.predict),但发现手动计算结果与模型预测结果不匹配,如何获取适合手动计算的系数?

对应的代码如下:

import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression

x=np.array([[0.25],[0.35],[0.45],[0.55],[0.65],[0.75],[0.85],[0.95]])
y=np.array([[81.2198],[77.882 ],[74.5442],[72.319],[70.6501],[67.8686],[67.3123],[65.6434]])

x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.125, random_state=42)

degree = 3

# 创建包含多项式特征转换和线性回归的管道
model = make_pipeline(
    PolynomialFeatures(degree=degree, include_bias=False),
    LinearRegression()
)

# 拟合训练数据
model.fit(x_train, y_train)

# 测试集预测
y_pred = model.predict(x_test)

# 计算绝对误差
abs_error_array = np.array(np.abs((y_test - y_pred)))

# 获取线性回归系数
linreg_coef = model.named_steps['linearregression'].coef_

print(linreg_coef)
解决方案

问题出在两个关键点:遗漏了截距项,以及未匹配多项式特征的生成顺序,按以下步骤修正即可:

  1. 获取完整的模型参数
    线性回归模型除了coef_(多项式各项的系数),还有intercept_(截距项)——因为你使用的LinearRegression默认开启fit_intercept=True,会单独计算截距。

  2. 明确多项式特征的顺序
    当PolynomialFeatures(degree=3, include_bias=False)时,生成的特征顺序是:x^1, x^2, x^3,对应linreg_coef中的系数顺序。

  3. 手动计算的公式
    对于输入值x_val,手动计算预测值的公式为:

    y_manual = intercept + coef1 * x_val + coef2 * x_val**2 + coef3 * x_val**3
    
  4. 验证代码示例
    加入以下代码验证手动计算与模型预测的一致性:

    # 获取截距项
    linreg_intercept = model.named_steps['linearregression'].intercept_
    
    # 取测试集中的一个样本
    x_val = x_test[0][0]
    # 手动计算预测值
    y_manual = linreg_intercept + linreg_coef[0][0]*x_val + linreg_coef[0][1]*x_val**2 + linreg_coef[0][2]*x_val**3
    # 模型预测值
    y_model = model.predict([[x_val]])[0][0]
    
    print(f"手动计算值: {y_manual:.5f}")
    print(f"模型预测值: {y_model:.5f}")
    

    运行后会发现两者结果完全一致。

额外说明

如果你的多项式特征包含偏置项(即include_bias=True),那么LinearRegression会自动关闭截距计算(fit_intercept被设为False),此时coef_的第一个元素就是偏置项,手动计算时直接按coef0 + coef1*x + coef2*x² + coef3*x³即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:17:38