如何对特征重要性进行排名?

数据挖掘 神经网络 特征选择 特征提取 matlab
2022-02-25 08:22:52

如果我使用神经网络分类器训练一个网络,我怎么知道哪个特征对预测目标变量最重要?我的意思是如何在特征之间创建一个“特征排名”(从高重要性值到低重要性值)。我看过一些关于决策树/AdaBoost 的文献,但我通常对神经网络感兴趣,尤其是用于分类目的。为了更清楚,图中显示了一个示例。

截屏

2个回答

有多种可能性。

显而易见的一个是将每个输入神经元从输入层到第一个隐藏层的所有连接的权重相加。连接权重总和最高的神经元应该是最重要的。这有几个问题。

  • 权重可能是负数,因此您应该使用它们的绝对值。
  • 权重取决于输入变量的规模。您应该对输入进行归一化,例如通过减去均值并除以输入的标准差(z 归一化)。

另一种可能性是选择性地删除特征,重新训练网络并观察哪些特征的删除导致模型准确性的最大下降。这些可能是最重要的特征。

这种方法的问题是,它改变了网络的架构,重新训练它并且不报告进入原始网络的特征的相关性。

您可以在此处找到有关该问题的详细讨论ftp://ftp.sas.com/pub/neural/importance.html

还有多种其他方法,例如 Garson 的方法,使用复杂的函数来纠正某些问题。您可以在 R 的NeuralNetTools包中找到其中的几个实现。

sevo 提出的第一个解决方案是不可行的,因为没有提到的第三个问题。第一层只学习输入的第一个表示,在后面的层中使用。即使绝对权重x1可能非常大,如果后面的层与这些神经元连接的权重很小,那么重要性就会下降。这正是神经网络被认为难以解释的原因。其余的答案很有用,我只是想添加这个。