LoginSignup
0
1

More than 1 year has passed since last update.

Shapの decision plotを画像として出力したい

Last updated at Posted at 2022-09-18

結論から先に言うと

decision_plotshow パラメータを 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が呼ばれないので好きな設定で画像ファイルに書き出せる。
多分出力前にいろいろ設定とかもできるはず。

出力結果

image.png
うむ。(legendは消してあります)

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1