
代码绘制成果展示















代码解释


第一部分

# =========================================================================================# ====================================== 1. 库的导入 =========================================# =========================================================================================import pandas as pdimport numpy as npimport xgboost

第二部分

# =========================================================================================# ====================================== 2.颜色库 =========================================# =========================================================================================COLOR_SCHEMES = {1: 'coolwarm',}

第三部分

# =========================================================================================# ======================================4.绘图函数=======================================# =========================================================================================def plot_shap_analysis(shap_values_obj, X_data, scheme_id, r2_val, mae_val, rmse_val):scheme = COLOR_SCHEMES[scheme_id] # 获取配色方案#判断方案类型if isinstance(scheme, list):current_cmap = LinearSegmentedColormap.from_list(f'custom_{scheme_id}', scheme) #创建自定义渐变色else:current_cmap = plt.get_cmap(scheme) #内置的#子图编号fig.text(0.04, #x0.95, #y"(a)", #文本fontsize=18, #字体大小fontweight='bold') #加粗fig.text(0.85, #x0.95 #y, "(b)", #文本fontsize=18, #字体大小fontweight='bold') #加粗

第四部分

ax_main = fig.add_subplot(gs[:, :2]) #添加主子图ax_main.set_yticks(range(len(feature_importance_df))) #设置y轴刻度#设置y轴标签ax_main.set_yticklabels(feature_importance_df['feature'],#文本fontsize=16, #字体大小fontweight='bold') #加粗bar_colors = current_cmap(np.linspace(0, 1, len(feature_importance_df))) #条形图颜色bar_colors[:, 3] = 0.45 #设置透明度main_title = f"RI SHAP Analysis - Global\n$\\mathbf{{R^2={r2_val:.3f}}}$, $\\mathbf{{MAE={mae_val:.3f}}}$, $\\mathbf{{RMSE={rmse_val:.3f}}}$"ax_main.set_ylim(-0.5, len(feature_importance_df) - 0.5) #主轴y范围ax_top.set_ylim(-0.5, len(feature_importance_df) - 0.5) #顶轴y范围

第五部分

# 提取前8个特征top_8_features = feature_importance_df['feature'].tail(8).iloc[::-1].tolist(feature_idx = X_data.columns.get_loc(feature) #获取索引x_col_data = X_data[feature] #x数据y_col_data = shap_values_obj.values[:, feature_idx] #y数据#绘制y=0横线ax.axhline(0, #ycolor='darkgray', #颜色linestyle='-', #线型linewidth=2, #宽zorder=1) #层

第六部分

x_span = x_col_data.max() - x_col_data.min() #x跨度ax.text(text_x, #xy_max - y_span * 0.15, #yf"M={m_str}", #文本color='black', #颜色fontweight='bold', #加粗fontsize=12) #大小ax.text(text_x, #xy_max - y_span * 0.35, #yf"T={t_str}", #文本color='red', #颜色fontweight='bold', #加粗fontsize=12) #大小#子图标题ax.set_title(f"({i + 1}) {feature}", #文本loc='left', #左对齐fontsize=14, #大小fontweight='bold', #加粗pad=3) #间距#y轴标题ax.set_ylabel("SHAP value", #文本fontsize=12, #大小fontweight='bold') #加粗#设置刻度ax.tick_params(axis='both', #轴which='major', #刻度labelsize=11) #标签大小for spine in ax.spines.values():spine.set_linewidth(2.5) #线宽spine.set_color('black') #颜色

第七部分

# =========================================================================================# ======================================6.执行部分 =========================================# =========================================================================================if __name__ == "__main__":excel_file_path = r'data.xlsx'df = pd.read_excel(excel_file_path) #读取数据target_column = 'GST' #目标feature_columns = [col for col in df.columns if col != target_column] #特征print(f"训练集评估结果: R2={r2_train:.3f}, MAE={mae_train:.3f}, RMSE={rmse_train:.3f}")print(f"测试集评估结果: R2={r2_test:.3f}, MAE={mae_test:.3f}, RMSE={rmse_test:.3f}")explainer = shap.TreeExplainer(model) #SHAP解释器shap_values = explainer(X_test) #测试集SHAP值plot_shap_analysis(shap_values, X_test,scheme_id, r2_test, mae_test, rmse_test)

如何应用到你自己的数据

1.设置原始数据的保存路径,执行部分:
excel_file_path = r'data.xlsx'2.设置目标数据,执行部分:
target_column = 'GST' #目标3.设置超参数,执行部分:
param_grid = {'n_estimators': [100, 200],'learning_rate': [0.05, 0.1],'max_depth': [3, 5],}
4.设置是否进行批量绘图,执行部分:
plot_all = True5.设置绘图结果的保存地址,绘图函数部分:
plt.savefig(fr'\scheme_{scheme_id}.png', dpi=300,bbox_inches='tight')
推荐


获取方式
