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

Shap是否兼容PolynomialFeatures(degree=1)?多项式回归解释器构建报错求助

解决多项式回归的SHAP维度错误问题

SHAP完全兼容多项式回归,你遇到的维度错误核心原因是直接将PolynomialFeatures特征转换器当作预测模型传入SHAP解释器——它只是用来生成多项式特征的工具,不是完整的预测模型,且未匹配正确的特征维度。

错误根源

你之前的代码中,PolynomialFeatures实例本身没有预测能力,它的输出维度(比如原始11个特征,degree=1会生成12个特征,包含常数项)和你传入的原始特征维度(11个)不匹配,导致SHAP计算时出现维度对齐错误。

正确实现步骤

要正确解释多项式回归模型,需要先构建完整的多项式回归流程(特征转换+线性回归模型),再用SHAP解释这个完整模型。推荐用sklearn.pipeline.Pipeline打包整个流程,这样SHAP可以直接处理原始特征,无需手动处理维度问题。

完整代码示例

from sklearn.preprocessing import PolynomialFeatures
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
import shap
import pandas as pd

# 假设df是你的特征数据集,y是目标变量
X = df
y = ... # 替换为你的目标变量列

# 1. 构建完整的多项式回归Pipeline
poly_reg_pipeline = Pipeline([
    # 多项式特征转换,可根据需求调整degree参数
    ('poly_transform', PolynomialFeatures(degree=2, include_bias=False)),
    # 线性回归模型
    ('linear_model', LinearRegression())
])
# 训练完整模型
poly_reg_pipeline.fit(X, y)

# 2. 初始化SHAP解释器并计算SHAP值
# 用原始特征作为背景数据,解释器会自动处理Pipeline中的特征转换
explainer = shap.Explainer(poly_reg_pipeline, X)
shap_values = explainer(X)

# 3. 绘制SHAP汇总图
shap.summary_plot(shap_values, X)

补充说明

如果不用Pipeline,也可以手动转换特征后训练模型,但需要确保SHAP解释器接收的是转换后的特征和训练好的线性回归模型:

# 手动转换特征的方式
poly = PolynomialFeatures(degree=2, include_bias=False)
X_poly = poly.fit_transform(X)
model = LinearRegression()
model.fit(X_poly, y)

# 此时需要传入转换后的特征给解释器
explainer = shap.LinearExplainer(model, X_poly)
shap_values = explainer.shap_values(X_poly)
# 如果要对应原始特征逻辑,可映射PolynomialFeatures生成的特征名
shap.summary_plot(shap_values, X_poly, feature_names=poly.get_feature_names_out())
  • include_bias=False可以去掉PolynomialFeatures默认生成的常数项,避免不必要的维度干扰,也更符合LinearRegression的训练逻辑(该模型默认会添加截距)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 15:22:44