質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

1回答

2620閲覧

shapで waterfallやdependence_plotを出したいが心当たりのないエラーが出る

Dantesu

総合スコア8

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2022/03/30 01:17

編集2022/03/30 06:36

前提

AIの分類機を作っていますが、解釈をするためSHAPを出そうとしています。
練習用にshap.datasets.adult()を使って、他人の成功したコードのコピペで進めています。
ところが
1waterfall
2dependence_plot で心あたりのないエラーが出てしまいます。

発生している問題・エラーメッセージ

Waterfall

TypeError Traceback (most recent call last)
~\AppData\Local\Temp/ipykernel_7752/3313443298.py in <module>
4 shap_values=shap_values[1][index,:],
5 features=X_train.iloc[index,:],
----> 6 show=True
7 )

TypeError: waterfall() got an unexpected keyword argument 'expected_value'

dependence_plot

ValueError: Passing parameters norm and vmin/vmax simultaneously is not supported. Please pass vmin/vmax directly to the norm when creating it.

### 該当のソースコード import numpy as np import pandas as pd import matplotlib.pyplot as plt import shap from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score import lightgbm as lgb %matplotlib inline #データセットの読込 X,y = shap.datasets.adult() X_display,y_display = shap.datasets.adult(display=True) X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=7) X_test_display = X_display.iloc[X_test.index,:] #ご参考 X_displayの中身 X_display.head() ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-03-30/96929d8d-e802-4b69-9e9a-f13d416d9e9c.jpeg) #モデル構築 lgb_train = lgb.Dataset(X_train, label=y_train) lgb_test = lgb.Dataset(X_test, label=y_test) params = { "objective": "binary", "metric": "binary_logloss", } lgb_model = lgb.train(params, lgb_train, 10000, valid_sets=lgb_test, early_stopping_rounds=50, verbose_eval=1000) pred = lgb_model.predict(X_test) print(accuracy_score(np.round(pred),y_test)) #SHAP shap.initjs() explainer = shap.TreeExplainer(model=lgb_model) shap_values = explainer.shap_values(X=X_test) #個々のデータを評価した理由を示す →問題なく描画される shap.force_plot(explainer.expected_value[1], shap_values[1][0,:], X_test_display.iloc[0,:],link="logit") #分布→ →問題なく描画される shap.force_plot(explainer.expected_value[1], shap_values[1][0:1000,:], X_test_display.iloc[0:1000,:],link="logit") #waterfall →エラー index = 1 shap.waterfall_plot( expected_value=explainer.expected_value[1], shap_values=shap_values[1][index,:], features=X_train.iloc[index,:], show=True ) #dependence plot →エラー shap.dependence_plot("Age", shap_values[1], X_test,display_features=X_test_display) ### 補足情報(FW/ツールのバージョンなど) jupyter を使っています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

shap.dependence_plot に関しては matplotlib の仕様変更に shap 側が対応できていないようで、Kaggle では matplotlib を 3.3.0 より前のものに downgrade する解決策が提示されていました。
(この対応で、shap.waterfall_plot の問題もついでに直るかもしれません。)
https://www.kaggle.com/questions-and-answers/302176
https://matplotlib.org/3.3.0/api/api_changes.html

python

1!pip uninstall matplotlib -y 2!pip install matplotlib==3.1.3 3print("Finished") 4#uninstall the latest matplotlib and install the older version like 3.1.3

shap の upgrade で対応した方が早いかもしれません……。
https://github.com/slundberg/shap/commit/8065cf7f9239574eed1c7d0ab3b40d538d16608d

conda install shap==0.41.0

投稿2022/08/21 22:30

編集2022/08/21 22:49
KotaYoneda

総合スコア11

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問