深層学習モデルのシャープな値を取得するために、DeepExplainer をいじっています。いくつかのチュートリアルに従うことで、いくつかの結果を得ることができます。つまり、どの変数がベース値からモデル予測をプッシュしているか、つまり、トレーニング セットの平均モデル出力です。
約 5,000 の観測値と 70 の特徴があります。DeepExplainer のパフォーマンスは非常に満足のいくものです。そして私のコードは次のとおりです。
model0 = load_model(model_p+'health0.h5')
background = healthScaler.transform(train[healthFeatures])
e = shap.DeepExplainer(model0, background)
shap_values = e.shap_values(healthScaler.transform(test[healthFeatures]))
test2 = test[healthFeatures].copy()
test2[healthFeatures] = healthScaler.transform(test[healthFeatures])
shap.force_plot(e.expected_value[0], shap_values[0][947,:], test2.iloc[947,:])
ここで、ベース値は 0.012 ( e.expected_value[0]からも確認できます) であり、出力値である 0.01 に非常に近い値です。
この時点で、いくつか質問があります。
1) 出力値は、model0.predict(test[healthFeatures])[947] = -0.103によって得られた予測と同一ではありません。出力値をどのように評価すればよいですか?
2) ご覧のとおり、SHAP 値の条件付き期待値を概算するために、トレーニング セット全体を背景として使用しています。トレーニング セットからのランダム サンプルとセット全体からのランダム サンプルの使用の違いは何ですか? パフォーマンスの問題のみに関連していますか?
よろしくお願いします!