有没有办法让Keras变得重要?

时间:2017-05-22 17:54:26

标签: tensorflow deep-learning keras keras-layer keras-2

我正在寻找一种在使用Keras创建的神经网络中获得变量重要性的正确或最佳方法。我目前这样做的方式是我只考虑第一层中变量的权重(而不是偏差),假设更重要的变量在第一层中具有更高的权重。还有其他/更好的方法吗?

4 个答案:

答案 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模型,例如LSTMGRU,而eli5则不能。

为避免重复发布,我想提供my answer to a similar question on Stackoverflow on using SHAP