如何对具有分类和数值特征的数据集执行特征选择?

数据挖掘 Python scikit-学习 特征选择
2021-09-27 21:11:54

我正在处理一个包含 30 列(29 个数字,1 个非序数分类)的数据集。我对分类特征进行了热编码,达到了 35 列。为了提高训练效率,我想对我的数据集进行特征选择。但是,我对如何处理结合了分类和数字特征的数据集感到困惑。

  1. 我读到对假人应用 PCA 是不合理的,因为它们是离散的。首先将 PCA 应用于数值特征然后将它们与假人连接是否合理?
  2. 我尝试通过交叉验证 (RFECV) 对整个特征空间实施递归特征消除。但是我认为删除一些但不是全部的虚拟特征是不合理的,因为它们是从一个类别中生成的。

有什么建议?任何帮助表示赞赏。

python pandas scikit-learn 特征选择

2个回答

将特征选择技术应用于一个热编码变量是很好的。因为如果该变量的一个特定部分与您的目标相关,那么这是一个好消息。您的模型将更好地理解场景。

或者,您可以先对分类变量进行标签编码,这样您仍然有 30 个变量(29 个数字 + 1 个标签编码的分类变量)。现在尝试找出每个变量的重要性值,并取相关变量(使用任何方法:RFE、随机森林特征选择、皮尔逊相关性等)。一旦你有了最终的变量列表,并且标签编码的变量也随之而来,就可以将其放入模型中。

特征选择或特征工程更像是一门艺术,而不仅仅是应用现成的技术。

我会建议你做/学习智能 EDA 并尝试消除/创建/合并功能。
- Kaggle 有很多关于这个主题的内核/讨论。
- 要获得丰富的直觉,请阅读本书,尤其是。章节#04。特征工程和选择观察作者如何遍历 EDA 中的不同发现。


分类特征编码-
- 您只有 1 个分类特征,也具有小基数和 29 个数值特征。我会建议消除数字特征。您可以在功能子集上尝试 PCA。参考
29号试试看效果。

- 尝试其他分类编码方法。使用这些链接category_encoders阅读参考下的链接以获得理解。即使对于 OHE,您也会喜欢这个库。

删除一些但不是所有的虚拟特征是合理的,因为它们是从一个类别中生成的

对分类特征进行编码后,您将拥有一组新的特征。您将每一个都视为一个独立的特征。根据分析,很可能其中只有少数没有用,我们将其删除。

一个热编码数据上的 PCA

- 你会得到一个输出,但我不太确定预测能力的增加。有一些相互矛盾的引用。参考 - Reddit Ref - SE
- 为分类和混合数据建议了其他技术。参考 SE 图书馆
尝试不同的组合,看看。


最后,尝试使用随机森林的特征重要性技术。参考 - 机器学习精通