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

如何使用scikit-learn实现多元多项式回归并提取对应多项式表达式

基于scikit-learn的任意阶多项式回归实现方案

核心逻辑

你不需要理解复杂的统计推导,多项式回归本质就是先对原始自变量做阶数扩展生成多项式特征,再代入线性回归模型拟合即可,和你已经实现的多元线性回归流程差异很小。

具体操作步骤

1. 导入依赖包

你之前做线性回归已经用到的包无需改动,只需要补充多项式特征转换的工具即可:

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.model_selection import train_test_split
from sklearn.metrics import r2_score, mean_squared_error

2. 生成指定阶数的多项式特征

建议先从2阶、3阶开始尝试,阶数过高极容易出现过拟合问题

# X为你的N个自变量数据集,y为对应的因变量
# 先拆分训练集、测试集,必须在特征转换前拆分,避免数据泄露
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 定义多项式转换器,degree参数填你需要的阶数,比如2就是二阶多项式
poly_converter = PolynomialFeatures(degree=2, include_bias=False)
# 仅用训练集拟合转换器,同时生成训练集的多项式特征
X_train_poly = poly_converter.fit_transform(X_train)
# 转换测试集特征,不要调用fit_transform,避免泄露测试集信息
X_test_poly = poly_converter.transform(X_test)

3. 拟合模型并评估效果

拟合逻辑和你之前用的线性回归完全一致:

# 初始化模型
poly_model = LinearRegression()
# 拟合训练集
poly_model.fit(X_train_poly, y_train)

# 效果评估
y_train_pred = poly_model.predict(X_train_poly)
y_test_pred = poly_model.predict(X_test_poly)
print(f"训练集R²:{r2_score(y_train, y_train_pred):.3f}")
print(f"测试集R²:{r2_score(y_test, y_test_pred):.3f}")

如果测试集R²比你之前的纯线性回归更高,说明多项式拟合有效;如果训练集R²很高但测试集R²明显下降,说明已经过拟合,需要降低阶数。

更优的落地实现方案

方案1:带正则化的多项式回归(解决过拟合问题)

如果尝试更高阶数时出现过拟合,直接把LinearRegression替换为岭回归(Ridge)即可,自带正则化效果,只需调整alpha参数控制正则化强度,alpha越大越不容易过拟合,建议从0.1、1、10几个值尝试:

from sklearn.linear_model import Ridge
poly_model = Ridge(alpha=1)
# 后续拟合、预测逻辑和之前完全一致

方案2:用管道封装全流程(避免手动操作出错)

可以把特征转换、模型拟合两步封装成管道,不用手动处理特征转换的逻辑,减少出错概率:

from sklearn.pipeline import Pipeline
# 定义管道,可直接替换degree、regressor的参数
poly_pipeline = Pipeline([
    ('poly_feature', PolynomialFeatures(degree=2, include_bias=False)),
    ('regressor', Ridge(alpha=1))
])
# 直接传入原始特征即可,无需手动转换
poly_pipeline.fit(X_train, y_train)
y_test_pred = poly_pipeline.predict(X_test)

方案3:自动搜索最优参数

如果不想手动调试阶数、alpha参数,可以用网格搜索自动匹配最优组合:

from sklearn.model_selection import GridSearchCV
# 定义要搜索的参数范围
params = {
    "poly_feature__degree": [2,3,4],
    "regressor__alpha": [0.1,1,10]
}
# 初始化搜索器
grid = GridSearchCV(poly_pipeline, params, cv=5, scoring='r2')
grid.fit(X_train, y_train)
# 输出最优参数和最优得分
print("最优参数:", grid.best_params_)
print("交叉验证最优R²:", grid.best_score_)
# 直接用最优模型预测
best_model = grid.best_estimator_
y_test_pred = best_model.predict(X_test)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:39:03