✨ 欢迎关注Python机器学习AI ✨
本节介绍: 部分依赖图(PDP)绘制与局部放大插图揭示拐点与特征影响 ,数据采用模拟数据无任何现实意义,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。完整数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。文末提供高效的学习工具~!
✨ 论文信息 ✨
文献中展示了基于GBDT模型的部分依赖图(PDP)分析,并结合局部放大插图与拐点标记对关键特征的影响规律进行了细致展现。其中,图D通过局部放大插图清晰揭示了特征在特定区间内的变化趋势;如图g与图h,通过红色虚线标记的拐点能够直观展示特征变化对模型输出的影响程度。PDP所示结果表明Max.Hg⁰去除效率在特征取值达到关键阈值后趋于稳定:当Cl和K的掺杂比分别为0–5wt%与0–8wt%时,随着含量增加,汞⁰去除效率显著提升;而当掺杂比超过5wt%与8wt%后,其最大去除效率基本保持不变,说明继续增加Cl或K含量对Hg⁰去除效果的提升已不再明显
✨ 代码实现 ✨
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False
import warnings
# 忽略所有警告
warnings.filterwarnings("ignore")
path = r"2025-12-8公众号Python机器学习AI.xlsx"
df = pd.read_excel(path)
from sklearn.model_selection import train_test_split
# 划分特征和目标变量
X = df.drop(['SR'], axis=1) # 从数据集中去掉目标变量 'y',得到特征变量 X
y = df['SR'] # 提取目标变量 y
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)from sklearn.ensemble import GradientBoostingRegressor
from sklearn.model_selection import cross_val_score
from sklearn.metrics import mean_squared_error
max_depth_list = list(range(1, 21))
n_estimators_list = list(range(1, 101))
records = []
for depth in max_depth_list:
for n_est in n_estimators_list:
model = GradientBoostingRegressor(
max_depth=depth,
n_estimators=n_est,
random_state=42
)
scores = cross_val_score(model, X_train, y_train, cv=5, scoring='neg_mean_squared_error')
rmse = np.sqrt(-scores.mean())
records.append([depth, n_est, rmse])
results = pd.DataFrame(records, columns=['max_depth', 'n_estimators', 'RMSE'])
from sklearn.ensemble import GradientBoostingRegressor
# 从 results 中找到 RMSE 最小的那一行
best_row = results.loc[results['RMSE'].idxmin()]
best_depth = int(best_row['max_depth'])
best_n_estimators = int(best_row['n_estimators'])
best_rmse = best_row['RMSE']
# 用该最优参数训练最终的 GBDT 模型
GBDT = GradientBoostingRegressor(
max_depth=best_depth,
n_estimators=best_n_estimators,
random_state=42
)
GBDT.fit(X_train, y_train)
通过在不同的决策树深度(max_depth)和估计器数量(n_estimators)下使用交叉验证来调优GBDT模型,并最终选择使均方根误差(RMSE)最小化的最优超参数,然后使用这些参数训练最终的GBDT模型,具体参考文章——期刊复现:ML模型的超参数优化及模型预测效果可视化配图,来自同一篇文献
PDP(部分依赖图)和ICE(个体条件期望)是两种常用于机器学习模型可解释性的可视化方法(本质是一种解释方法的两种可视化形式)
- PDP:PDP展示某个特征或一组特征与目标变量之间的关系,保持其他特征不变。PDP的计算原理是通过对特定特征的所有可能值进行均值化,从而描绘出该特征对预测结果的平均影响。帮助理解单一特征的变化对模型预测的总体影响
- ICE:ICE图是PDP的扩展,它展示单个样本的预测值随着某个特征变化的趋势。与PDP不同,ICE显示了每个个体样本的条件期望,能够揭示不同样本在同一特征变化下的响应差异。ICE的计算原理是对每个样本,分别固定其他特征的值,观察目标特征变化时模型预测值的变化,也就是PDP是ICE的均值
Python中可以直接使用sklearn.inspection、pdpbox等库绘制PDP和ICE图,当然由于其计算原理并不复杂,所以可以灵活进行自定义可视化如——期刊配图:两个输入变量共同作用对模型的影响:3D偏依赖图(PDP)与ALE图、期刊配图:模型解释PDP可视化进阶置信区间+拟合曲线等,这里进行部分依赖图(PDP)绘制与局部放大插图揭示拐点与特征影响
df_pdp_infP = get_pdp_values(GBDT, X_test, 'infP', grid_resolution=50)
df_pdp_infP.head()
通过自定义函数get_pdp_values计算特征'infP'在X_test数据集上的部分依赖图(PDP)值,其中GBDT是训练好的模型,X_test是测试数据,'infP'是要分析的特征,grid_resolution=50指定计算PDP时在特征值范围内生成的50个网格点用于绘制平滑的PDP曲线,grid_resolution值越大,点越多,曲线插值越细,最终可视化效果就越平滑;点越少,曲线会更粗糙甚至出现折线感
# 插图的 X 轴范围 (适用于特征 'infP')
infP_inset_xlim = (15, 25)
# 这里在 x=20 处添加虚线,标记特定位置
infP_vline_x = [20]
# 绘制带有局部放大插图的PDP图
# x_data 和 y_data 传入特征 'infP' 的数据及其对应的部分依赖值
fig, ax = plot_pdp_with_zoom(
x_data=df_pdp_infP['infP'], # 特征 'infP' 的数据
y_data=df_pdp_infP['PDP_Value'], # 'infP' 特征对应的部分依赖值
inset_xlim=infP_inset_xlim, # 小图显示的数据范围,聚焦于 (3, 20) 范围
inset_loc=(0.15, 0.55), # 插图位置:左中上方 (x=0.15, y=0.55)
inset_size=(0.35, 0.35), # 插图大小:宽度 0.35,高度 0.35
vline_x=infP_vline_x, # 在 x=5.2 和 x=20 处添加红色虚线
save_path='infP.pdf' # 将图像保存为 PDF 文件,文件名为 'infP.pdf'
)
# 显示图形
plt.show()
这里通过前面计算得到的特征infP的PDP值,利用自定义函数进行可视化,绘制特征 'infP' 的部分依赖图(PDP),并通过局部放大插图展示特定区间(15到25)的详细趋势,同时在图中添加了红色虚线标记特定拐点
在特征值达到某一阈值时(例如图中的infP值为20附近),模型输出发生了明显变化,表明这个特征对预测结果的影响是非线性的,当infP的取值超20时,模型的预测几乎不再变化,表明进一步增加该特征值对模型预测影响不大
# 获取特征 'infC' 的 PDP 值
df_pdp_infC = get_pdp_values(GBDT, X_test, 'infC', grid_resolution=50)
infC_inset_xlim = (60, 95)
infC_vline_x = [65,90]
fig, ax = plot_pdp_with_zoom(
x_data=df_pdp_infC['infC'],
y_data=df_pdp_infC['PDP_Value'],
inset_xlim=infC_inset_xlim,
inset_loc=(0.55, 0.55),
inset_size=(0.35, 0.35),
vline_x=infC_vline_x,
xlabel="InfC",
ylabel="PDP-SR",
save_path='infC.pdf'
)
plt.show()
计算了特征 'infC' 的部分依赖图(PDP)值,同时进行可视化,可以发现特征 'infC' 在小于65和大于90,模型的预测预测值基本上是保持不变的,同理可以对剩下的特征进行同样的PDP计算及其模型解释可视化绘制,当然需要根据不同的特征范围进行相应参数的确定
当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,下方提供淘宝店铺二维码获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 合集获取 ✨
欢迎到公众号后台,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!
✨ 书籍推荐 ✨
无论你是零编程基础的科研新手,还是想提升机器学习技能的医学科研工作者,这本书都能带你从入门到进阶,掌握Python数据分析+医学AI应用的全流程技能
✨ AI工具推荐 ✨
往期推荐
期刊配图:模型SHAP解释特征类别柱状图、饼图与蜂巢图的组合展示
期刊复现:基于自动机器学习的预测模型构建及其残差和部分依赖分析
期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况最优模型的SHAP解释
期刊复现:单变量特征降维与共线性分析结合RFE集成排名进行特征筛选下的组合拳流程
期刊复现:SVM、RF、BDT、DT、Logit五大模型堆叠31种组合情况优化与最优模型选择可视化
期刊复现:基于相关系数与AUC值优化特征选择剔除冗余特征精简模型(附代码)
期刊复现:如何正确使用LASSO进行二分类特征选择?避开常见误区,掌握实用技巧
期刊复现:融合聚类与多分类转二分类的亚型可解释SHAP机器学习模型构建
期刊复现:基于LightGBM、XGBoost与RF的Lasso回归堆叠模型在连续和分类特征上的模型解释
期刊复现:基于LightGBM、XGBoost与RF的堆叠模型贝叶斯优化调参与Lasso回归元模型,结合10倍交叉验证
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考
