SHAP:force_plot

问题描述

我正在尝试应用 SHAP 来解释我的深度学习模型。模型如下所示:

def small_model():
    
    n_timesteps=3750
    n_features=1
    n_outputs=2
    
    ampl_signal = Input(shape=(X_train.shape[1:]))
    phase_signal = Input(shape=(X_train_phase.shape[1:]))
    #temp = Input(shape=(1,))
    #moist = Input(shape=(1,))
    #weight = Input(shape=(1,))
    
    concat_signal = Concatenate()([ampl_signal,phase_signal])
    x = Sequential()
    x.add(Conv1D(128,5,activation='relu',input_shape=(X_train.shape[1:]),kernel_initializer='glorot_normal')) #,input_shape=(None,3750,n_features)
    x.add(Conv1D(128,kernel_initializer='glorot_normal'))
    x.add(MaxPooling1D(5)) 
    x.add(Conv1D(64,n_features)
    x.add(Conv1D(64,kernel_initializer='glorot_normal'))

    x.add(GlobalAveragePooling1D())
    x.add(Dense(64,activation='relu'))

    x.add(Dense(n_outputs,activation='softmax'))

    x.compile(loss='sparse_categorical_crossentropy',#sparse_categorical_crossentropy
                  optimizer='Adam',metrics=['accuracy'])
    print(x.summary())
    return x

model = small_model()

我现在的问题是,每当我尝试从 SHAP 应用 force_plot 时,我都会得到一个空图形。我准备了以下最小示例:

model.compile(loss='mse',optimizer='adam')
model.summary()


x_train_1 = np.random.randint(0,6249,size=(10,1))
x_train_2 = np.random.randint(0,1))
x_test_1 = np.random.randint(0,1))
#x_test_2 = np.random.randint(0,1))

#x_train_1 = X_train[:10]
#x_train_2 = X_train_phase[:10]
#x_test_1 = X_train[10:20]

explainer = shap.DeepExplainer(model,[x_train_1,x_train_2])
shap_values = explainer.shap_values(x_test_1)

shap.initjs()

shap.force_plot(explainer.expected_value[0],np.concatenate([shap_values[0][0].reshape(1,-1,1),shap_values[1][0].reshape(1,1)],axis=1))

有人可以解释我怎么了。提前致谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)