关于 LSTM Keras 上的排列重要性的问题

2023-12-28

from keras.wrappers.scikit_learn import KerasClassifier, KerasRegressor   
import eli5
from eli5.sklearn import PermutationImportance

model = Sequential()
model.add(LSTM(units=30,return_sequences= True, input_shape=(X.shape[1],421)))
model.add(Dropout(rate=0.2))
model.add(LSTM(units=30, return_sequences=True))
model.add(LSTM(units=30))
model.add(Dense(units=1, activation='relu'))

perm = PermutationImportance(model, scoring='accuracy',random_state=1).fit(X, y, epochs=500, batch_size=8)
eli5.show_weights(perm, feature_names = X.columns.tolist())

我运行 LSTM 只是为了查看包含 400 多个特征的数据集的特征重要性。我使用 Keras scikit-learn 包装器来使用 eli5 的 PermutationImportance 函数。但代码正在返回

ValueError: Found array with dim 3. Estimator expected <= 2.

如果我使用,代码运行顺利model.fit()但无法调试排列重要性的错误。有人知道出了什么问题吗?


eli5's scikitlearn用于确定排列重要性的实现只能处理二维数组,而keras' LSTM图层需要 3d 数组。这个错误是一个已知问题 https://github.com/TeamHG-Memex/eli5/issues/294但目前似乎还没有解决办法。

我知道这并不能真正回答你的问题eli5使用 LSTM (因为它目前不能),但我遇到了同样的问题并使用了另一个名为SHAP https://github.com/slundberg/shap#deep-learning-example-with-deepexplainer-tensorflowkeras-models获取 LSTM 模型的特征重要性。以下是我的一些代码,可帮助您入门:

import shap
DE = shap.DeepExplainer(model, X_train) # X_train is 3d numpy.ndarray
shap_values = DE.shap_values(X_validate_np, check_additivity=False) # X_validate is 3d numpy.ndarray

shap.initjs()
shap.summary_plot(
    shap_values[0], 
    X_validate,
    feature_names=list_of_your_columns_here,
    max_display=50,
    plot_type='bar')

这是您可以获得的图表示例:

希望这可以帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

关于 LSTM Keras 上的排列重要性的问题 的相关文章

随机推荐