結論から先に言うと
decision_plot
の show
パラメータを Falseにして 手動でmatplotのsavefig
を実行する
起こった問題
Shapは機械学習のモデルがどのようにデータを解釈しているのかを分かりやすく表示してくれる。
decision plotのデータをmatplot上で見れるのは良いが、画像として表示したい。
また、できれば表示する前に色々と設定したかった。
解決策
showパラメータをTrueにしていると、内部的にmatplotlibのshow()が呼ばれてしまう。
showを呼んだ後に、savefigしても真っ白な画像しか出力されないので、showを呼ばないようにする。
ので、showパラメータにFalseを設定する。
( 参考 [python グラフ 保存 真っ白]: https://r-bxm-a.hatenablog.com/entry/2018/10/03/132320 )
showパラメータにFalseを設定してもmatplot側には表示するための値が渡されている。
ので、手動でsaveFigする。
import shap
import matplotlib.pyplot as plt
# shapのデータ読み込みここは各々書いてね
shap_data = load_shap_data()
# Decision Plotを実行
ret =shap.decision_plot(
base_value=shap_data.base_value,
shap_values=shap_data.shap_values,
feature_names=shap_data.feature_names,
color_bar=False,
legend_location="best",
link='logit',
# showをFalseにすることで内部のmatplot showが実行されなくなる
show=False,
feature_display_range=range(
len(shap_data.feature_names) - 100, len(shap_data.feature_names)
),
return_objects=True
)
# 良い感じにレイアウトを整えてもらう
plt.tight_layout(rect=[0,0,1,1])
# 画像として出力
plt.savefig("figure.png")
上記のようにするとshowが呼ばれないので好きな設定で画像ファイルに書き出せる。
多分出力前にいろいろ設定とかもできるはず。