1

深層学習モデルのシャープな値を取得するために、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 値の条件付き期待値を概算するために、トレーニング セット全体を背景として使用しています。トレーニング セットからのランダム サンプルとセット全体からのランダム サンプルの使用の違いは何ですか? パフォーマンスの問題のみに関連していますか?

よろしくお願いします!

4

1 に答える 1