✨ 欢迎关注 ✨
本节介绍: XGBoost结合PDP和ICE探究不同水平下特征对目标变量的影响 ,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。 获取 前请咨询,避免不必要的问题。
✨ 文献信息 ✨
在文献中,构建了一个分类的XGBoost模型,然后通过单向、双向和三向部分依赖图(PDP)用于探索LAeq、NDVI和噪声感知之间的关系
单向PDP:用于分析LAeq或NDVI单独对噪声感知的影响。这种图显示了每个特征(如LAeq或NDVI)对噪声感知的边际效应,并且保持其他因素不变,图4A、B
双向PDP:分析LAeq和NDVI两个因素对噪声感知的影响,查看这两个变量共同作用时的影响力。这可以帮助理解它们是如何相互作用以影响噪声感知的, 图4C
三向PDP:用于进一步分析在不同地理环境背景下,LAeq、NDVI和噪声感知之间的关系。这种图展示了这三个变量如何一起作用,影响噪声感知的过程,考虑了地理背景、LAeq和NDVI的交互作用, 图5,当然所谓的 三向PDP只是把每种情况利用 双向PDP和 不同水平下特征对目标变量的影响进行表示,红色方框内容显示了在不同的NDVI水平(M−SD、M、M+SD)下,LAeq与噪声感知的部分依赖关系
接下来,利用模拟数据,我们可以根据特征的三个不同水平(M−SD、M、M+SD)对特征进行分层,其中M−SD代表低水平,M作为平均水平,M+SD代表高水平。通过这种分层,可以绘制单向PDP图,观察被分层特征每个分层水平下观察特征对目标的影响
✨ 基础代码 ✨
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")
df = pd.read_excel('2025-7-20-公众号Python机器学习AI.xlsx')
from sklearn.model_selection import train_test_split
# 划分特征和目标变量
X = df.drop(['Outcome'], axis=1)
y = df['Outcome']
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(
X,
y,
test_size=0.3,
random_state=42,
stratify=df['Outcome']
)
from xgboost import XGBClassifier
from sklearn.model_selection import GridSearchCV, KFold
# 初始化XGBoost分类模型
model_xgb = XGBClassifier(random_state=42, verbosity=0)
param_grid_xgb = {
'n_estimators': [100, 200], # 树的数量
'max_depth': [20, None], # 最大深度
'learning_rate': [0.01, 0.1], # 学习率
'subsample': [0.8, 1.0], # 子样本比例
'colsample_bytree': [0.8, 0.9] # 每棵树的特征采样比例
}
# 10折交叉验证,加入随机种子
kf = KFold(n_splits=10, shuffle=True, random_state=42)
# 使用 GridSearchCV 进行网格搜索和 10 折交叉验证
grid_search_xgb = GridSearchCV(
estimator=model_xgb,
param_grid=param_grid_xgb,
scoring='neg_log_loss', # 评价指标为负对数损失
cv=kf, # 使用自定义的KFold
n_jobs=-1, # 并行计算
verbose=1 # 输出详细进度信息
)
# 训练模型
grid_search_xgb.fit(X_train, y_train)
# 使用最优参数训练模型
best_model_xgb = grid_search_xgb.best_estimator_
使用XGBoost分类模型,通过网格搜索和10折交叉验证优化超参数,训练并选择最佳模型以进行分类任务,当然文献中输出了 XGBoost模型10次交叉验证的平均测试成绩,具体的代码放在完整项目压缩包中
PartialDependenceDisplay.from_estimator(best_model_xgb, X_test, features, kind='average')
plt.savefig("2.pdf", format='pdf',bbox_inches='tight',dpi=1200)
plt.show()
features = ['Glucose']
PartialDependenceDisplay.from_estimator(best_model_xgb, X_test, features, kind='average')
plt.savefig("4.pdf", format='pdf',bbox_inches='tight',dpi=1200)
plt.show()
使用XGBoost模型的最佳估计器,通过PartialDependenceDisplay绘制单向PDP图,展示 BloodPressure 、Glucose特征对目标变量的平均部分依赖关系,对于二分类模型y轴默认对应的类别1概率,具体可以参考往期文章——PDP(部分依赖图)、ICE(个体条件期望)解释机器学习模型保姆级教程
# 选择两个特征绘制2D PDP
features = ['BloodPressure', 'Glucose']
# 使用 contour_kw 参数绘制2D PDP
fig, ax = plt.subplots(figsize=(10, 6), dpi=1200)
PartialDependenceDisplay.from_estimator(
best_model_xgb,
X_test,
features=[features],
grid_resolution=100,
contour_kw={'cmap': 'viridis', 'alpha': 0.8},
ax=ax
)
plt.savefig("5.pdf", format='pdf',bbox_inches='tight',dpi=1200)
plt.show()
使用XGBoost模型绘制BloodPressure和Glucose两个特征的二维部分依赖图(2D PDP),并通过contour_kw参数设置等高线图的颜色和透明度,也就是文献中的 双向PDP
最后计算Glucose特征的均值和标准差,并分别使用M-SD、M、M+SD三个水平的数据,绘制BloodPressure与Partial Dependence的折线图,以观察Glucose特征在不同水平下对目标变量的影响,实际运用中读者应该根据自己的研究目标确定分割水平的特征和绘制PDP的特征
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系,获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信deep_ML联系 避免淘宝客服漏掉信息 ,希望能为您的学习之路提供帮助!
往期推荐
期刊复现:连续数据与分类数据共存的SHAP可视化散点图与箱形图组合形式
期刊复现:多分类任务如何拆分为二分类任务并进行堆叠预测提高模型预测性能
期刊配图:SHAP值分析模型可解释性在柱状图与蜂窝图中的进阶组合展示
期刊配图:通过堆叠Mean|SHAP|展示不同区间对模型贡献度的可视化分析
期刊复现:利用UMAP降维算法可视化深度学习随着训练次数的增加模型区分能力的变化
期刊配图:PCA、t-SNE与UMAP三种降维方法简化高维数据的展示应用对比
Science期刊复现:分类、回归与Shap分析多角度揭示同一数据集变量对目标的影响
多模型SHAP+PDP解读Stacking集成模型:从基学习器到元学习器的可解释性与模型调参实现
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考