如何修改代码为每个特征生成独立的Partial Dependence Plot(PDP)
问题描述
当前生成的Partial Dependence Plot(部分依赖图,PDP)是将6个特征的图合并在一张画布中,如何修改代码,为每个特征生成独立的PDP(共6张独立图)?
解决方案
核心思路是循环遍历每个特征,单独生成对应PDP图:
- 不再一次性传入所有特征索引,而是逐个传入单个特征索引
- 每次生成图前创建新的画布(
plt.figure()),确保每个图独立 - 为每张图单独设置标题、坐标轴标签,提升可读性
修改后的完整代码
from sklearn.base import BaseEstimator, RegressorMixin from sklearn.utils import check_X_y, check_array import pandas as pd import matplotlib.pyplot as plt from sklearn.inspection import PartialDependenceDisplay # 加载数据 data_set = pd.read_excel("Alpha copy.xlsx") pd.set_option('max_columns', 35) pd.set_option('max_rows', 300) data_set.head(300) X, y = data_set[["B","D","k","fc","Le","N"]], data_set[["R"]] # 自定义回归器(修正原代码缩进错误) class DummyRegressor(BaseEstimator, RegressorMixin): def fit(self, X, y): X, y = check_X_y(X, y, y_numeric=True) self.X_ = X self.y_ = y return self def predict(self, X): X = check_array(X) # 确保objective函数接受对应参数(需自行定义objective) return objective(X[:, 0], X[:, 1], X[:, 2], X[:, 3], X[:, 4], X[:, 5]) # 训练模型 dummy_reg = DummyRegressor() dummy_reg.fit(X, y.values.ravel()) # 特征列表,用于循环 features = ["B", "D","k", "fc","Le", "N"] # 循环生成每个特征的独立PDP图 for idx, feature_name in enumerate(features): # 创建新画布,每个图独立 plt.figure(figsize=(8, 5)) # 单独生成当前特征的PDP display = PartialDependenceDisplay.from_estimator( dummy_reg, X, [idx], feature_names=[feature_name], ax=plt.gca() # 指定当前画布的轴 ) # 设置坐标轴标签和标题 plt.ylabel("R") plt.title(f"部分依赖图 - 特征 {feature_name}") # 可选:保存图片,路径可自行修改 # plt.savefig(f"pdp_{feature_name}.png", dpi=100, bbox_inches='tight') plt.show()
关键修改点说明
- 新增循环遍历每个特征,每次仅传入单个特征索引
[idx] - 每次调用
plt.figure()创建独立画布,避免图重叠 - 为每张图添加专属标题,明确对应特征
- 修正原代码中
predict方法的缩进错误,以及补充pandas导入(原代码遗漏)
内容的提问来源于stack exchange,提问作者user20155022
相关产品推荐
相关产品推荐

