如何区分信息性和非信息性特征 - 特征重要性?

数据挖掘 机器学习 数据挖掘 预测建模 特征选择 特征工程
2022-03-06 07:29:26

我有一个包含 5K 条记录的数据集,专注于二进制分类问题。我的数据集中有 60 多个特征。当我使用Xgboost时,我得到了下面的Feature Importance情节。但是我不确定如何确定所有这些是否都提供信息?

在此处输入图像描述

问题

1) 是的,我可以选择前 15/20/25 等。但这是怎么做的?有没有F-score我们应该寻找的最低限度?

2)或者就像我选择前 10 个特征,检查准确性,然后在每轮中再次添加 2-3 个特征并手动验证准确性。这是这样做的吗?

3)你们会怎么做?我尝试了完整的数据集,准确率只有 86% 左右。当我尝试使用 15-20 个功能时,它只有大约 84 个。那么手动功能选择是进一步改进的唯一方法吗?

你能帮我吗?

1个回答

我的做法完全不同。在创建 之后feature importance,我通常会提出这样一个问题:“重要性低的特征是否真的没有信息,或者它的信息性质被其他特征所掩盖?”

我该如何回答这个问题?

我使用一种简单的方法——减少每次迭代中的特征数量*(最重要的特征不在它们之间的可能性更大),添加一个包含随机数的虚拟特征,并创建一个新的feature importance. 根据定义,随机虚拟特征是非信息性的,因此假设重要性低于此虚拟特征的特征是非信息性的,恕我直言,这并不奇怪。因此,下一步是删除这些功能。

然后我通常从另一边开始选择。有时更有价值、更重要的特征,肯定是信息丰富的,会导致过度拟合,删除它们会提高准确性。

*) 每次迭代 ( ) 中特征的默认划分colsample_bytree等于 1,但在特征选择阶段可以将其设置为 0.2-0.4 范围内的低得多的值。