GoogleColabで、SHAPを実行しています。
TreeExplainer、モデルはxgbです。
force plotは、回帰と二値分類の場合、以下で描画。
Python
1shap.initjs() 2shap.force_plot(explainer.expected_value, shap_values, X_selected) 3
マルチ分類の場合、以下で描画。
Python
1shap.initjs() 2shap.force_plot(explainer.expected_value[1], shap_values[1], X_selected) 3
データセットのタイプ毎にコード操作は面倒なので、
マルチ分類データですよ等と事前に認識させて、
Python
1shap.initjs() 2if dataset == ‘multi’: 3 shap.force_plot(explainer.expected_value[1], shap_values[1], X_selected) 4else: 5 shap.force_plot(explainer.expected_value, shap_values, X_selected) 6
として実行しても表示されません。
すこし強引ですが、以下を実行しても表示されませんでした。
Python
1 2shap.initjs() 3try: 4 shap.force_plot(explainer.expected_value[1], shap_values[1], X_selected) 5except: 6 pass 7 8try: 9 shap.force_plot(explainer.expected_value, shap_values, X_selected) 10except: 11 pass 12
何かうまい方法をご存知の方がおられましたら、ご教示お願いできませんでしょうか?
※以下が現在の実行コードです。以下の実行コードに上記の変更を加えてもうまくいかなかったということになります。
Python
1 2#@title **Classification**(分類)or **Regression**(回帰) 3#回帰か分類かによってXGB.XGBClassifierを実行するか、XGB.XGBRegressorを実行するかを変えるため、ココで区分。 4 5#@title **Classification**(分類)or **Regression**(回帰) 6dataset_type = 'Classification' #@param ["Classification", "Regression"] 7 8 9#@title **Load Dataset** 10if dataset =='Upload': 11 from google.colab import files 12 uploaded = files.upload()#Upload 13 target = list(uploaded.keys())[0] 14 df = pd.read_csv(target) 15 16FEATURES = df.columns[:-1] 17TARGET = df.columns[-1] 18X = df.loc[:, FEATURES] 19y = df.loc[:, TARGET] 20 21 22#@title **SHAP summary plot** 23 24import xgboost as XGB 25import shap 26 27#XGB 28if dataset_type == 'Regression': 29 xgb = XGB.XGBRegressor(random_state=0) 30else: 31 xgb = XGB.XGBClassifier(random_state=0) 32 33xgb.fit(X, y) 34 35#SHAP 36explainer = shap.TreeExplainer(xgb) 37shap_values = explainer.shap_values(X) 38 39 40#@title **SHAP summary plot** 41shap.summary_plot(shap_values,X) 42 43 44#@title **SHAP force plot** 45shap.initjs() 46shap.force_plot(explainer.expected_value, shap_values, X) 47
動作確認に必要な再現できる最小限のサンプルを</>ボタンで表示される記号の間に挟んで掲載できますか?
加筆修正ありがとうございます。あとは動作確認のためのデータが必要です。
例えばですが、
https://www.medi-08-data-06.work/entry/how_to_use_shap
に、SHAPの例があり、
> #データセットの読込
> X,y = shap.datasets.adult()
とすると、shapライブラリの動作確認用のサンプルデータがロードできるようです。
Q. hima2b4さんと同じデータを同じように走らせ動作確認をできるようにできますか?
つまるところ、同じデータを同じコードで走らせないときちんと検証ができない、という話です。
例えば、
・ 上記のサンプルデータを使って同じ状況を再現できるようにする
・ hima2b4さんの使っているデータをアップロードして同じコードを検証できるようにする
どちらでも構いませんが、2つ目のやり方が簡単そうに思います。
回答1件
あなたの回答
tips
プレビュー