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

如何用Sklearn构建单变量立方+时间项线性的多元多项式回归?

解决方案:构建含单变量三次多项式+线性时间项的回归模型

核心思路

不对所有特征统一做多项式变换,而是单独生成x的三次多项式特征,再与线性的time特征拼接,最后用线性回归拟合,精准匹配你需要的模型形式:

y = c1 + c2x + c3x² + c4x³ + c5time + error

具体实现代码

1. 导入依赖库

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures

2. 准备数据(替换为你的真实数据)

确保x、time、y是sklearn要求的二维数组格式:

# 模拟示例数据(可替换成你的真实数据)
np.random.seed(42)
x = np.random.rand(100).reshape(-1, 1)  # 转换为(样本数, 1)的二维数组
time = np.random.rand(100).reshape(-1, 1)
y = 2 + 3*x + 4*x**2 + 5*x**3 + 6*time + np.random.randn(100,1)*0.1

3. 生成x的三次多项式特征

两种实现方式任选:

方式一:用PolynomialFeatures(规范便捷)

# 仅对x生成三次多项式,不包含偏置项(后续LinearRegression会自动添加截距c1)
poly = PolynomialFeatures(degree=3, include_bias=False)
x_poly = poly.fit_transform(x)
# x_poly结构为 [x, x², x³],形状为(样本数, 3)

方式二:手动构造(直观清晰)

x_poly = np.concatenate([x, x**2, x**3], axis=1)

4. 拼接特征并拟合模型

# 横向拼接x的三次多项式特征与time特征,得到最终特征矩阵
X = np.hstack([x_poly, time])

# 拟合线性回归模型
model = LinearRegression()
model.fit(X, y)

# 输出模型参数,对应目标模型的c1~c5
print(f"截距c1: {model.intercept_[0]:.4f}")
print(f"系数c2(x): {model.coef_[0][0]:.4f}")
print(f"系数c3(x²): {model.coef_[0][1]:.4f}")
print(f"系数c4(x³): {model.coef_[0][2]:.4f}")
print(f"系数c5(time): {model.coef_[0][3]:.4f}")

之前方法效果差的原因

如果直接对[x, time]整体使用PolynomialFeatures(degree=3),会生成大量冗余特征(如time²、time³、x*time等),这些特征不在你的目标模型中,会干扰拟合过程,导致结果严重偏离真实数据。而单独处理x再拼接time,能严格控制特征维度,完全匹配你需要的模型结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:46:12