我有时间序列数据和每个样本或多或少 200 个特征,我使用循环神经网络进行二元分类任务。分类后,我想知道哪些特征对目标之一贡献最大(假设目标=1)。有什么建议的方法吗?谢谢
分类后的特征重要性
您可以使用排列重要性
- 获取您的基线分数
- 排列特征值。可以用随机值替换
- 再次计算分数
- 倾角是该特征的特征重要性
- 对所有特征重复
....Breiman 和 Cutler 还描述了排列重要性,它衡量了一个特征的重要性,如下所示。通过将验证集或袋外 (OOB) 样本通过随机森林来记录基线准确度(分类器)或 R2 分数(回归器)。置换单个预测器特征的列值,然后将所有测试样本传回随机森林并重新计算准确度或 R
检查单个类的重要性,即 0/1
推断相同以检查假阳性或假阴性的增加是否更多。
阅读当心默认随机森林重要性以获得更多解释。
页面上的其他引用很少-
任何机器学习模型都可以使用排列列的策略来计算特征重要性。这一事实在学术界和工业界都被低估了。
置换机制在 计算 上比平均减少杂质机制要昂贵得多,但结果更可靠。置换重要性策略 不需要 在置换每一列后重新训练模型;我们只需要通过已经训练好的模型重新运行扰动的测试样本。
另一种可能的解决方案是使用 L1 正则化。Lasso Regression 可以作为特征选择的代理:由于 L1 范数的导数是阶跃函数,因此在训练模型时,与给定特征相关的权重将接近或不接近于零,具体取决于它们预测的重要性输出。
此外,sklearn 有一种方法 sklearn.feature_selection.SelectFromModel
可以让您在训练模型后执行特征选择。如果您在 Lasso 回归器上运行此方法并将方法结果与模型权重进行比较,您将能够看到权重大小与所选特征之间的相关性。
非线性模型非常复杂,因此无法导出单个特征的重要性(从某种意义上说,如果我增加一个特征,模型将倾向于特定类别)。
所以说如果你增加一个特征,模型会为一个类投票更多,这不是你可以期待的,因为模型是非线性的。例如,看看google playground并考虑带有两个圆圈的数据集。
但是,您可以做的是在局部推导特征重要性,因为您可以通过线性函数局部逼近神经网络。这可以用来解释行为和特征重要性,但仅限于当前位置周围的小邻域。如果你去另一个位置,行为可能会完全不同!