首页 > 解决方案 > SHAP 将图形保存为空白/白色,但 Matplotlib 可以很好地保存图形

问题描述

我正在尝试在训练随机森林后绘制 SHAP 总结图。我使用 VSCode 连接到远程工作人员并在那里运行我的代码。当我运行我的代码来生成和保存图像时,它不会抛出任何错误,而只会生成一个白盒/空白图。此代码在下方(顶部)。不同寻常的是,当我在 SHAP 之外测试使用 Matplotlib 生成和保存图形时,但在这个 ssh 隧道上,它工作得非常好(底部)。

我正在使用 matplotlib 版本 = 1.5.1 和 SHAP 版本 = 0.34.0。值得注意的是我尝试调试它和我的设置的一些事情:(1)这个确切的代码在我不再有权访问的以前的工作人员上工作。对我来说,这表明这是环境配置的问题;(2) 我尝试使用plt.gcf()将 SHAP 图转换为纯 matplotlib 对象并保存它,但这也不起作用;(3)我尝试plt.close()在新的之前关闭情节()plt.figure(),但这也没有奏效;(4) 我已经尝试了我当前的代码,无论是否有matplotlib=True标志;(5) 我正在尝试生成许多 SHAP 图形(未显示),这些也产生了空白/白色图;(6) 我使用的是 Mac,远程工作人员是 Linux (Ubuntu)。

任何见解将不胜感激。谢谢。

当前代码——返回白框/空白图

import pandas as pd
import sklearn
import numpy as np
import os
import csv
import shap
import pickle
import warnings
import pydot

from sklearn import tree
from sklearn.tree import export_graphviz
from sklearn.utils import shuffle
from sklearn.model_selection import learning_curve, GridSearchCV, RandomizedSearchCV
from sklearn.model_selection import train_test_split
from sklearn.calibration import CalibratedClassifierCV
from sklearn.ensemble import RandomForestClassifier
from sklearn import metrics
import matplotlib 

matplotlib.use('Agg')
import matplotlib.pyplot as plt

#fit random forest here. very long, so I decided to omit it

plt.figure()
fig1 = shap.summary_plot(shap_values,tt, show=False, matplotlib=True, plot_type="bar", plot_size=(10, 10))
plt.savefig('/home/path/path/shap_summary.png', dpi=600)
plt.close() 

SHAP 之外的 MATPLOTLIB -- 保存一个正常的绘图

plt.figure()
x = np.linspace(0, 100, 1000) 
plt.plot(x, np.log(x))      
plt.savefig('home/path/thisworks.png')
plt.close()

标签: pythonmatplotlibvisual-studio-codedata-scienceshap

解决方案


推荐阅读