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

use*_*204 11 deep-learning keras tensorflow keras-layer keras-2

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

Jus*_*las 15

*编辑以包含相关代码以实现排列重要性。

在 Python 中使用 Keras 的神经网络中的特征重要性图表中回答了一个类似的问题。它确实实现了上面提到的Teque5,即使用ELI5 包在您的样本或排列重要性中混洗变量。

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())
Run Code Online (Sandbox Code Playgroud)

  • 我有多个功能,并得到`TypeError:如果没有指定评分,则通过的估算器应该有一个“评分”方法。估计器 <keras.engine.training.Model 对象在 0x7fb2277e50b8> 没有。` (3认同)

Dan*_*ler 10

由于所有内容都会在网络中混淆,因此单独的第一层无法告诉您每个var的重要信息.以下层也可以增加或减少它们的重要性,甚至使一个var影响另一个var的重要性.第一层中的每个神经元本身也会赋予每个变量不同的重要性,因此它不是那么直接的东西.

我建议你model.predict(inputs)使用包含零数组的输入,只使你想要研究的变量在输入中为1.

这样,您就可以看到每个var的结果.尽管如此,对于一个var增加另一个var的重要性的情况,这仍然无法帮助您.

  • 您应该真正将样本中的变量改组,而不是将其设置为零。这样可以保留输入的均值和方差。 (4认同)
  • 我想知道我们是否可以使用sklearn中的随机森林特征重要性,然后使用它评估的重要特征到keras分类器.这会产生问题吗? (2认同)

jar*_*yeo 7

这是一篇相对较旧的帖子,其答案也相对较旧,因此我想提供另一个建议,用于SHAP确定 Keras 模型的特征重要性。SHAP还允许您使用需要 3D 输入的层来处理 Keras 模型,LSTMGRU不能eli5

为了避免重复发布,我想回答Stackoverflow 上关于使用SHAP.


Mar*_*oma 5

这不是那么简单。例如,在以后的阶段中,变量可以减少为0。

我来看看LIME(本地可解释模型不可知的解释)。基本思想是将一些输入设置为零,将其传递给模型,然后查看结果是否相似。如果是,则该变量可能没有那么重要。但是还有更多关于它的知识,如果您想知道它,那么您应该阅读本文。

请参阅GitHub上的marcotcr / lime