11

我目前正在使用 SHAP 包来确定功能贡献。我已经将这种方法用于 XGBoost 和 RandomForest,并且效果非常好。由于我正在处理的数据是顺序数据,我尝试使用 LSTM 和 CNN 来训练模型,然后使用 SHAP 获得特征重要性DeepExplainer;但它不断抛出错误。我得到的错误是:

AssertionError: <class 'keras.callbacks.History'> is not currently a supported model type!.

我也附上了示例代码(LSTM)。如果有人可以帮助我,那将会很有帮助。

shap.initjs()
model = Sequential()
model.add(LSTM(n_neurons, input_shape=(X.shape[1],X.shape[2]), return_sequences=True))
model.add(LSTM(n_neurons, return_sequences=False))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam')
h=model.fit(X, y, epochs=nb_epochs, batch_size=n_batch, verbose=1, shuffle=True)
background = X[np.random.choice(X.shape[0],100, replace=False)]
explainer = shap.DeepExplainer(h,background)
4

1 回答 1

10

的返回值model.fit不是模型实例;相反,它是作为类实例的训练历史(即损失和度量值等统计数据)keras.callbacks.History。这就是为什么当您将返回的History对象传递给shap.DeepExplainer. 相反,您应该传递模型实例本身:

explainer = shap.DeepExplainer(model, background)
于 2020-04-30T07:05:55.757 回答