SHAP DeepExplainer: shap_values, содержащий значения "nan" - PullRequest
0 голосов
/ 02 апреля 2020

У меня есть проблема с моими значениями Shap, вот моя модель:

Model: "model_4"
__________________________________________________________________________________________________
Layer (type)                    Output Shape         Param #     Connected to                     
==================================================================================================
input_5 (InputLayer)            [(None, 158)]        0                                            
__________________________________________________________________________________________________
model_1 (Model)                 (None, 158)          57310       input_5[0][0]                    
__________________________________________________________________________________________________
subtract_4 (Subtract)           (None, 158)          0           input_5[0][0]                    
                                                                 model_1[5][0]                    
__________________________________________________________________________________________________
multiply_4 (Multiply)           (None, 158)          0           subtract_4[0][0]                 
                                                                 subtract_4[0][0]                 
__________________________________________________________________________________________________
lambda_4 (Lambda)               (None,)              0           multiply_4[0][0]                 
__________________________________________________________________________________________________
reshape_3 (Reshape)             (None, 1)            0           lambda_4[0][0]                   
==================================================================================================
Total params: 57,310
Trainable params: 57,310
Non-trainable params: 0
__________________________________________________________________________________________________

И я звоню:

scores = new_model.predict(X_test_scaled)
scores = scores.reshape(scores.shape[0],1)
toexplain = np.append(X_test_scaled, scores, axis = 1)
toexplain = pd.DataFrame(toexplain)
toexplain.sort_values(by = [158], ascending=False, inplace=True)
toexplain = toexplain.iloc[0:16]
toexplain.drop(columns = [158], axis = 1, inplace = True)

explainer=shap.DeepExplainer(new_model, df_sampled_X_train_scaled)
shap_values = explainer.shap_values(toexplain, check_additivity=False)

Но мои значения Shap выглядят так (для первого пример):

shap_values[0]

array([        nan,         nan,         nan,  0.08352888,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,  0.03286453,
               nan,         nan,  0.2984612 ,         nan,         nan,
               nan,  0.01110088, -0.85235232,         nan,         nan,
               nan,         nan,         nan,         nan, -0.27935541,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan, -0.18422949,  0.01466912,         nan,
               nan,         nan, -0.1688329 ,  0.07462809,  0.03071906,
               nan, -0.00554245,         nan,         nan,         nan,
               nan,  0.04587848,         nan,         nan,         nan,
               nan,  0.05448143,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,  0.00933742,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,  0.00919492,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan,         nan,         nan,
               nan,         nan,         nan])

Я вполне уверен, что у меня не должно быть значений nan среди моих значений shap_values, но я не могу найти оригинальную проблему. Более того, предсказанные значения, заданные shap.force_plot, отличаются от предсказаний моей модели, поэтому я в первую очередь проверил свои значения shap_values.

Кто-нибудь знает, как я могу это исправить?

1 Ответ

0 голосов
/ 07 апреля 2020

Хорошо, прочитав исходный код shap, я понял, что он не принял во внимание, что данные были pandas 'фреймами данных, хотя в документации указано иное.

Работало с использованием numpy .arrays

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...