今日作业偏思考类型,有一定难度。
参考上述文档补全剩余的几个图。
尝试确定一下shap各个绘图函数对于每一个参数的尺寸要求,如shap.force_plot力图中的数据需要满足什么形状?
确定分类问题和回归问题的数据如何才能满足尺寸,分类采取信贷数据集,回归采取单车数据集。
首先是局部特征图
mport matplotlib.pyplot as plt
import shap
explainer = shap.TreeExplainer(rf_model)
shap_values = explainer.shap_values(X_test)
shap_values2 = explainer(X_test)
print("shap_values shape:", shap_values.shape)
print("shap_values[0] shape:", shap_values[0].shape)
print("shap_values[:, :, 0] shape:", shap_values[:, :, 0].shape)
print("X_test shape:", X_test.shape)
print("--- 1. SHAP 局部特征重要性条形图 ---")
shap.plots.bar(shap_values2[:, :, 0])
plt.title("SHAP Feature Importance (Bar Plot)")
plt.show()
Summary Plot上面使用Summary Plot方法并设置参数plot_type="bar"绘制典型的特征重要性条形图,而他默认绘制Summary_plot图,他是结合了特征重要性和特征效果,取代了条形图。Summary_plot 为每一个样本绘制其每个特征的Shapley value,它说明哪些特征最重要,以及它们对数据集的影响范围。
选择两个最重要的特征并对其进行可视化
shap.dependence_plot('Maximum Open Credit', shap_values[:, :, 0], X_test, interaction_index='Years of Credit History', show=False)
plt.title("SHAP Dependence Plot for 'Maximum Open Credit' vs 'Years of Credit History")
plt.show()
下列这段代码的主要目的是使用 shap 库的 force_plot 函数可视化测试集中第一个样本的预测结果,展示每个特征对预测结果的贡献。 matplotlib=True 表示使用 matplotlib 库绘图, show=False 表示不立即显示图表,需要后续调用 plt.show() 来显示, text_rotation=30 则是设置图表中文本的旋转角度。
shap.force_plot(explainer.expected_value[0],
shap_values[0][:, 0],
x_test.iloc[0,:],
matplotlib=True,
show=False,
text_rotation=30)
plt.title("SHAP Force Plot for Single Sample")
plt.tight_layout()
plt.show()
decision plot
hap.decision_plot(explainer.expected_value[0],
shap_values[:, :, 0][:30],
X_test.iloc[:30,:],
feature_order='importance',
show=False)
plt.title("SHAP Decision Plot")
plt.show()
486

被折叠的 条评论
为什么被折叠?



