如何在 python/Scikit 学习中处理具有许多唯一值的分类特征

How to handle categorical features with many unique values in python/Scikit learn

在我的情况下,我想对我的数据集中大约 5 个不同的列进行编码,但问题是这 5 个列有许多唯一值。

如果我使用标签编码器对它们进行编码,我会添加一个不正确的不必要的顺序,而如果我使用 OHE 或 pd.get_dummies,那么我最终会有很多功能会添加到数据非常稀疏。

我目前正在处理一个监督学习问题,以下是每列的唯一值:

Job_Role : Unique categorical values = 29
Country : Unique categorical values = 12
State : Unique categorical values = 14
Segment : Unique categorical values = 12
Unit : Unique categorical values = 10

我已经查看了多个参考资料,但不确定最佳方法。在这种情况下,对我的模型具有最大积极影响的最少特征应该是什么

据我所知,通常在这些情况下使用 OneHotEncoder,但正如您所说,您的数据中有很多唯一值。之前找过一个项目的解决方案,看到了如下几种不同的方式,

  1. OneHotEncoder + PCA: I think this way is not quite right, because PCA is designed for continuous variables.[*]

  2. Entity Embeddings:这个方法我不是很了解,不过你可以从标题中的link中查看。

  3. BinaryEncoder:我认为,当你有大量的类别并且进行 one-hot 编码会增加维度并反过来增加模型复杂性时,这很有用.因此,二进制编码是对维数较少的分类变量进行编码的不错选择。

  4. category_encoders 库中还有一些其他解决方案。