✨ 欢迎关注 ✨
本节介绍:通过堆叠Mean|SHAP|展示不同区间对模型贡献度的可视化分析。数据采用模拟数据,作者根据个人对机器学习的理解进行代码实现与图表输出,仅供参考。 完整 数据和代码将在稍后上传至交流群,付费成员可在交流群中获取下载。需要的朋友可关注公众文末提供的购买方式。 购买前请咨询,避免不必要的问题。
✨ 文献信息 ✨
图中的可视化展示 垂直方向上不同高度对模型贡献度的分布 ,具体包括:
- a图:展示模型各个特征对均值|SHAP|的贡献,y轴表示高度,x轴表示Mean |SHAP|的大小。该图反映了不同特征对目标变量的变化的影响,在不同的目标变量区间下特征对其的影响排名是不一样的
- b图:展示各特征对模型贡献的相对比例(|SHAP|_RC)。这显示每个特征在不同高度区域的相对贡献。例如,一些特征(如温度、湿度、风速等)对模型的贡献在不同的高度层次上变化明显。低高度区域(如0-0.5km)与高高度区域(如1.0-2.0km)的贡献分布差异
这个可视化反映不同气象特征对气溶胶垂直分布的影响,且显示了不同高度区域下,模型不同特征贡献度的差异,比如这里特征RH在区间1.5-2是影响程度最高的特征但是在区间0-0.5最高的特征又是DOY,这是常规shap整体解释柱状图做不到的
✨ 模拟实现结果 ✨
这是展示通过模拟数据集获得的结果,重点展示不同特征对房价(log_price)的相对贡献
✨ 基础代码 ✨
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 设置 Matplotlib 的默认字体为 Times New Roman,避免乱码
plt.rcParams['font.family'] = 'Times New Roman'
plt.rcParams['axes.unicode_minus'] = False
df = pd.read_csv('seattle_sample_all.csv', index_col=0)
from sklearn.model_selection import train_test_split
# 划分特征和目标变量
X = df.drop(['log_price', 'UTM_X', 'UTM_Y'], axis=1)
y = df['log_price']
# 划分训练集和测试集
X_train, X_test , y_train, y_test = train_test_split(
X,
y,
test_size=0.3,
random_state=42
)
from xgboost import XGBRegressor
from sklearn.model_selection import GridSearchCV, KFold
from sklearn.metrics import mean_squared_error
# 定义模型
xgb = XGBRegressor(objective='reg:squarederror', random_state=42)
# 定义参数网格
param_grid = {
'n_estimators': [100, 200],
'max_depth': [3, 5, 7],
'learning_rate': [0.01, 0.1, 0.2],
'subsample': [0.8, 1],
'colsample_bytree': [0.8, 1]
}
# 设置K折交叉验证
kfold = KFold(n_splits=5, shuffle=True, random_state=42)
# 网格搜索 + 交叉验证
grid_search = GridSearchCV(
estimator=xgb,
param_grid=param_grid,
cv=kfold,
scoring='neg_mean_squared_error',
verbose=1,
n_jobs=-1
)
# 拟合训练数据
grid_search.fit(X_train, y_train)
import shap
explainer = shap.TreeExplainer(xgboost)
shap_values = explainer.shap_values(X_test)
plt.figure(figsize=(10, 5), dpi=1200)
shap.summary_plot(shap_values, X_test, plot_type="bar", show=False)
plt.tight_layout()
plt.savefig("summary_plot.pdf", format='pdf',bbox_inches='tight', dpi=1200)
plt.show()
通过训练XGBoost回归模型并使用网格搜索优化超参数,然后利用SHAP值生成特征重要性的条形图,条形图的作用是展示每个特征在模型预测中对目标变量(如房价)的影响力,具体来说,它通过显示SHAP值的绝对值,帮助理解各个特征对预测结果的贡献大小。较长的条形代表该特征对模型输出的影响较大,而较短的条形则表示影响较小
但是单一的条形图无法展示特征在不同区间内的贡献差异,而堆叠图可以有效解决这一问题。通过堆叠可视化,可以在不同的特征区间内展示每个特征的贡献,从而更直观地看出特征在不同范围下对模型预测结果的不同影响
参考文献中的配图采用堆叠方式,通过分区间展示特征对模型的贡献,可以清晰地体现某些特征在不同数值区间(例如0-1、1-2区间)对目标变量的不同贡献。这种方式不仅增强了对特征贡献差异的理解,还能够发现不同区间内特征的重要性变化趋势
根据柱状图可知特征 grade对于模型的贡献度是最大的,但是通过现在这个可视化可知,特征 grade在目标变量区间5.42-5.92时对于模型的影响是有一定减小的同时特征age对模型的影响程度有一定增加,其它特征解释类似,这是单纯的柱状图体现不了的解释结果,当然作者这里区间区分就是目标变量,读者也可以利用其它具有意义的特征判断不同区间下特征贡献的变化
✨ 该文章案例 ✨
在上传至交流群的文件中,像往期文章一样,将对案例进行逐步分析,确保读者能够达到最佳的学习效果。内容都经过详细解读,帮助读者深入理解模型的实现过程和数据分析步骤,从而最大化学习成果。
同时,结合提供的免费AI聚合网站进行学习,能够让读者在理论与实践之间实现融会贯通,更加全面地掌握核心概念。
✨ 购买介绍 ✨
本节介绍到此结束,有需要学习数据分析和Python机器学习相关的朋友欢迎到淘宝店铺:Python机器学习AI,或添加作者微信deep_ML联系,购买作者的公众号合集。截至目前为止,合集已包含近300多篇文章,购买合集的同时,还将提供免费稳定的AI大模型使用,包括但不限于ChatGPT、Deepseek、Claude等。
更新的内容包含数据、代码、注释和参考资料。 作者仅分享案例项目,不提供额外的答疑服务。项目中将提供详细的代码注释和丰富的解读,帮助您理解每个步骤 。 购买前请咨询,避免不必要的问题。
✨ 群友反馈 ✨
✨ 淘宝店铺 ✨
请大家打开淘宝扫描上方的二维码,进入店铺,获取更多Python机器学习和AI相关的内容,或者添加作者微信deep_ML联系 避免淘宝客服漏掉信息 ,希望能为您的学习之路提供帮助!
往期推荐
机器学习在临床数据分析中的应用:从数据预处理到Web应用实现的完整流程教学
期刊配图:PCA、t-SNE与UMAP三种降维方法简化高维数据的展示应用对比
XGBoost模型优化:基于相关系数剔除多重共线性与穷举法进行特征选择
Geographical-XGBoost:一种基于梯度提升树的空间局部回归的新集成模型实现
因果推断:利用EconML实现双重机器学习估计条件平均处理效应 (CATE)
期刊复现:基于XGBoost模型的网页工具SHAP力图解释单样本预测结果
期刊配图:nature cities通过ALE(累积局部效应)解析特征对模型影响
期刊复现:结合因果推断与SHAP可解释性的机器学习实现应用流程
nature communications:基于LightGBM与随机森林结合的多模型特征选择方法
如果你对类似于这样的文章感兴趣。
欢迎关注、点赞、转发~
个人观点,仅供参考