我正在寻找一种在使用Keras创建的神经网络中获得变量重要性的正确或最佳方法。我目前这样做的方式是我只考虑第一层中变量的权重(而不是偏差),假设更重要的变量在第一层中具有更高的权重。还有其他/更好的方法吗?
答案 0 :(得分:9)
由于所有内容都会在网络中混淆,因此单独的第一层无法告诉您每个var的importante。以下层也可以增加或减少它们的重要性,甚至使一个var影响另一个var的重要性。第一层中的每个神经元本身也会赋予每个变量不同的重要性,因此它不是那么直接的东西。
我建议你使用包含零数组的输入model.predict(inputs)
,使得你想要研究的变量在输入中为1。
这样,您就可以看到每个var的结果。尽管如此,对于一个var增加另一个var的重要性的情况,这仍然无法帮助您。
答案 1 :(得分:5)
不是那么简单。例如,在后期阶段,变量可以减少到0。
我看看LIME(本地可解释模型 - 不可知解释)。基本思想是将一些输入设置为零,将其传递给模型并查看结果是否相似。如果是,那么该变量可能不那么重要。但是有更多关于它的内容,如果你想知道它,那么你应该阅读论文。
请参阅GitHub上的marcotcr/lime。
答案 2 :(得分:3)
*经过编辑以包含实现置换重要性的相关代码。
我在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())
答案 3 :(得分:3)
这是一个相对较旧的帖子,具有相对较旧的答案,因此,我想提出另一个建议,使用SHAP
来确定Keras模型的特征重要性。 SHAP
还允许您使用需要3d输入的图层来处理Keras模型,例如LSTM
和GRU
,而eli5
则不能。
为避免重复发布,我想提供my answer to a similar question on Stackoverflow on using SHAP
。