如何为所有SHAP值批量绘制Force Plot?LSTM模型可视化问题
解决SHAP循环绘制Force Plot无输出的问题
问题原因
在Jupyter Notebook/Lab这类交互式环境中,单独执行shap.force_plot()时,环境会自动捕获并渲染返回的可视化对象;但在循环逻辑里,生成的可视化对象不会被自动触发渲染,必须显式调用展示方法。
具体解决方法
方法1:用IPython的display函数显式展示
导入display模块,在循环中每次生成Force Plot后调用它来触发渲染:
import shap from IPython.display import display def f(x): return LSTM_model.predict(x) shap.initjs() shap_values50 = explainer.shap_values(test_windows[0:50], nsamples=500) # 循环绘制并显式展示每个样本的Force Plot for i in range(50): plot = shap.force_plot(explainer.expected_value, shap_values50[0][i]) display(plot)
方法2:批量导出为HTML文件(适合存档或单独查看)
如果需要保存所有样本的Force Plot,可将每个图导出为HTML文件,之后直接打开文件查看:
import shap def f(x): return LSTM_model.predict(x) shap.initjs() shap_values50 = explainer.shap_values(test_windows[0:50], nsamples=500) # 循环生成并保存每个样本的Force Plot为HTML for i in range(50): plot = shap.force_plot(explainer.expected_value, shap_values50[0][i]) shap.save_html(f"eth_price_force_plot_{i}.html", plot)
注意事项
- 若在普通Python脚本而非交互式环境中运行,Force Plot的网页式渲染无法直接展示,建议优先使用Jupyter类环境。
- 批量生成50个Force Plot可能导致Notebook页面加载缓慢,可按需分批次生成展示。
内容的提问来源于stack exchange,提问作者Sinan
相关产品推荐
相关产品推荐

