【发布时间】:2017-10-22 11:39:24
【问题描述】:
我正在寻找一种适当或最佳的方法来在使用 Keras 创建的神经网络中获得可变重要性。我目前这样做的方式是我只取第一层中变量的权重(而不是偏差),并假设更重要的变量在第一层中具有更高的权重。还有其他/更好的方法吗?
【问题讨论】:
标签: tensorflow deep-learning keras keras-layer keras-2
我正在寻找一种适当或最佳的方法来在使用 Keras 创建的神经网络中获得可变重要性。我目前这样做的方式是我只取第一层中变量的权重(而不是偏差),并假设更重要的变量在第一层中具有更高的权重。还有其他/更好的方法吗?
【问题讨论】:
标签: tensorflow deep-learning keras keras-layer keras-2
由于网络中的所有内容都会混淆,仅第一层无法告诉您每个变量的重要性。下面的层也可以增加或减少它们的重要性,甚至使一个变量影响另一个变量的重要性。第一层中的每个神经元本身也会赋予每个变量不同的重要性,所以这不是那么简单的事情。
我建议您使用包含零数组的输入来执行model.predict(inputs),仅使您要研究的变量在输入中为 1。
这样,您可以单独看到每个变量的结果。即便如此,在一个变量增加另一个变量的重要性的情况下,这仍然无济于事。
【讨论】:
*已编辑以包含相关代码以实现排列重要性。
我在Feature Importance Chart in neural network using Keras in Python 回答了类似的问题。它确实实现了上面提到的Teque5,即使用ELI5 package 在您的样本或排列重要性中打乱变量。
from keras.wrappers.scikit_learn import KerasClassifier, KerasRegressor
import eli5
from eli5.sklearn import PermutationImportance
def base_model():
model = Sequential()
...
return model
X = ...
y = ...
my_model = KerasRegressor(build_fn=basemodel, **sk_params)
my_model.fit(X,y)
perm = PermutationImportance(my_model, random_state=1).fit(X,y)
eli5.show_weights(perm, feature_names = X.columns.tolist())
【讨论】:
TypeError: If no scoring is specified, the estimator passed should have a 'score' method. The estimator <keras.engine.training.Model object at 0x7fb2277e50b8> does not.
事情没那么简单。例如,在后期阶段,变量可以减少到 0。
我会看看LIME(本地可解释模型无关的解释)。基本思想是将一些输入设置为零,将其传递给模型并查看结果是否相似。如果是,那么该变量可能并不那么重要。但是还有更多关于它的内容,如果你想了解它,那么你应该阅读这篇论文。
请参阅 GitHub 上的 marcotcr/lime。
【讨论】:
这是一篇相对较旧的帖子,答案相对较旧,所以我想提供另一个建议,使用SHAP 来确定您的 Keras 模型的特征重要性。 SHAP 还允许您使用需要 3d 输入的层处理 Keras 模型,例如 LSTM 和 GRU,而 eli5 不能。
为避免重复发帖,我想提供my answer to a similar question on Stackoverflow on using SHAP。
【讨论】: