期刊复现:XGBoost模型与LIME结合解析单样本预测的决策逻辑

机器学习算法大数据

picture.image

✨ 欢迎关注 ✨

本节介绍:XGBoost模型与LIME结合解析单样本预测的决策逻辑,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,成员可在交流群中获取下载。需要的朋友可关注公众文末提供的获取方式。 获取 前请咨询,避免不必要的问题。

✨ 文献信息 ✨

picture.image

文献中LIME(局部可解释的模型无关解释)用于分析绿化暴露如何调节噪声水平与感知噪声之间的关系。LIME被用来提供对XGBoost模型预测的局部解释,揭示不同绿化水平如何在不同地理背景下影响噪声感知,LIME计算出的正向或负向联合贡献展示了噪声水平和绿化的组合如何增加或减少感知噪声的概率,使研究人员能够探索这些因素在不同城市空间中的单独效应和联合效应

在此基础上,接下来将在模拟数据集上实现这一过程,通过使用XGBoost模型进行二分类任务,并结合LIME进行局部解释,探索模型在实际数据上的表现。此外,文献中还提到使用PDP(部分依赖图)进行全局解释,参考往期复现的流程——期刊复现:XGBoost结合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_  
print("Best Parameters:", grid_search_xgb.best_params_)

使用XGBoost分类器,通过GridSearchCV进行网格搜索,在10折交叉验证的基础上优化模型的超参数(如树的数量、最大深度、学习率等),以负对数损失(neg_log_loss)为评价指标,最终选出最佳参数配置并训练模型,输出最优的超参数组合

  
Fitting 10 folds for each of 32 candidates, totalling 320 fits  
Best Parameters: {'colsample_bytree': 0.8, 'learning_rate': 0.01, 'max_depth': None, 'n_estimators': 200, 'subsample': 0.8}

在对32个候选参数组合进行10折交叉验证后,最优的超参数组合为:每棵树的特征采样比例(colsample_bytree)为0.8,学习率(learning_rate)为0.01,最大深度(max_depth)为None,树的数量(n_estimators)为200,子样本比例(subsample)为0.8

  
from xgboost import plot_tree  
from IPython.display import Image  
  
# 选择模型的第一棵树  
# 对于XGBClassifier,使用plot_tree方法来可视化特定的树  
# 选择树的索引,例如0表示第一棵树  
fig, ax = plt.subplots(figsize=(10, 8))  # 可以调整图像大小  
plot_tree(best_model_xgb, num_trees=0, ax=ax)  # 0表示第一棵树  
  
# 保存树图像为PDF文件,dpi设置为1200  
plt.savefig('tree.pdf', dpi=1200, bbox_inches='tight')

picture.image

使用XGBoost的plot_tree方法可视化最佳模型的第一棵树,原始可视化结果较大这里只是第一棵树的部分结果

  
from lime.lime_tabular import LimeTabularExplainer  
# 初始化 LIME 解释器  
explainer = LimeTabularExplainer(  
    training_data=np.array(X_train),         # 训练数据  
    feature_names=X.columns.tolist(),        # 特征名称  
    class_names=['Healthy', 'Sick'],              # 分类标签(根据实际情况修改)  
    mode='classification'                   # 模式为分类  
)  
# 从测试集中选取一个样本  
test_instance = X_test.iloc[0]  
test_instance_array = test_instance.values.reshape(1, -1)  
# 生成样本解释  
exp = explainer.explain_instance(  
    data_row=test_instance,                  # 测试样本数据  
    predict_fn=best_model_xgb.predict_proba           # 使用模型的预测概率方法  
)  
# 显示解释  
exp.show_in_notebook(show_table=True)        # 在 Notebook 中显示解释表  
exp.save_to_file("lime_explanation.html")    # 保存解释到 HTML 文件

picture.image

初始化一个LIME(局部可解释模型-无关解释)解释器,并使用它为从测试集中选取的一个样本生成解释,具体包括:传入训练数据、特征名称和分类标签等信息来设置解释器;然后,对测试集中选取的样本(test_instance)使用模型的预测概率方法(predict_proba)生成该样本的LIME解释;展示该样本的解释结果,详细解读可以参考往期文章——期刊配图:模型可解释性工具LIME的实现及其优劣点

picture.image

这个图表展示了LIME对模型预测结果的解释,显示了各个特征对样本预测为“健康”或“患病”的贡献,其中“健康”类的预测概率为78%,而“患病”类的预测概率为22%。图中通过水平条形图展示了各特征的贡献值,蓝色条表示特征对预测“健康”的支持,黄色条则表示对预测“患病”的支持。这个图表是对上面HTML解释结果的可视化优化,使得特征的贡献和类别的影响更加直观

当然,公众号中还有更多机器学习期刊实战技巧,您可以通过历史文章进行检索和阅读,关注公众号,点击“发信息”>“历史文章”即可搜索公众号所有文章信息

picture.image

✨ 该文章案例 ✨

picture.image

在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。

同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。

✨ 介绍 ✨

本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,下方提供淘宝店铺二维码获取作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用。

更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 获取 前请咨询,避免不必要的问题。

✨ 群友反馈 ✨

picture.image

✨ 淘宝店铺 ✨

picture.image

请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容 ,希望能为您的学习之路提供帮助!

往期推荐

期刊复现:连续数据与分类数据共存的SHAP可视化散点图与箱形图组合形式

期刊复现:多分类任务如何拆分为二分类任务并进行堆叠预测提高模型预测性能

期刊配图:SHAP模型解释多种特征重要性柱状图可视化解析

期刊配图:SHAP值分析模型可解释性在柱状图与蜂窝图中的进阶组合展示

期刊配图:通过堆叠Mean|SHAP|展示不同区间对模型贡献度的可视化分析

期刊复现:利用UMAP降维算法可视化深度学习随着训练次数的增加模型区分能力的变化

期刊配图:PCA、t-SNE与UMAP三种降维方法简化高维数据的展示应用对比

Science期刊复现:分类、回归与Shap分析多角度揭示同一数据集变量对目标的影响

多模型SHAP+PDP解读Stacking集成模型:从基学习器到元学习器的可解释性与模型调参实现

picture.image

如果你对类似于这样的文章感兴趣。

欢迎关注、点赞、转发~

个人观点,仅供参考

0
0
0
0
关于作者

文章

0

获赞

0

收藏

0

相关资源
CV 技术在视频创作中的应用
本次演讲将介绍在拍摄、编辑等场景,我们如何利用 AI 技术赋能创作者;以及基于这些场景,字节跳动积累的领先技术能力。
相关产品
评论
未登录
看完啦,登录分享一下感受吧~
暂无评论