我通常在准备数据集时看到这一点。通常,数据科学家使用 LabelEncoder/ordinalEncoder 转换数据集中的非序数特征,如性别或语言。理想情况下,他们应该进行 One-hot 编码,对吗?引入序数不会通过带来不必要的偏差来影响模型吗?
如何处理诸如性别、语言、区域等非序数特征?序数编码还是单热编码?
数据挖掘
数据
特征工程
预处理
编码
一热编码
2022-02-15 09:50:36
2个回答
一款热编码器是您的最佳选择。不过,您必须处理扩大的尺寸大小,只要您不放弃您不提供偏好的类别。需要丢弃以避免共线性,这是一种花哨的说法:“我有四个朋友,安妮、巴特、嘉莉和迪伦。其中一个和我在一起。不是安妮,不是嘉莉,也不是迪伦。” 如果我公然说“它是巴特”,就会产生共线性。某些模型无法处理共线性。
减少因子并进行有意义的下降的一种方法是通过使用 PCA 方法将模型所需的维度减少到最低限度。如果要执行线性回归,可以使用 L1、L2 或两者(也称为 Ridge、Lasso 和弹性)回归。但是,您必须找到一个指标来通知您何时考虑到足够的维度。
任何数字编码都必然会引入一些排序,即使没有排序,仅仅是因为数字有 order,无论它们对我们意味着什么。
甚至 one-hot-encoding 也引入了 order,因为大于, 对?
所以任何数字编码都会引入顺序。One-hot 可能看起来更好,但如果你考虑一下它会大大扩大问题的维度,并且可能会遭受维度诅咒(这是另一个严重的问题),以及人为引入的排序,那么它可能根本不会更好。
One-hot(或 one-cold)编码仍然有其用途(各种架构可能通过 one-hot/one-cold 提供更好的结果),但它不是关于分类变量的无可争议的首选方法。希望现在这很清楚。
更新:根据@BenReiniger 的评论,我引用了When to use One Hot Encoding vs LabelEncoder vs DictVectorizor? 关于选择一种编码方法而不是另一种的合理标准:
我们在以下情况下应用 OHE:
- 当标签编码中彼此接近的值对应于不接近的目标值时(非线性数据)。
- 当分类特征不是序数时(狗、猫、老鼠)。
我们在以下情况下应用标签编码:
- 分类特征是有序的(Jr. kg、Sr. kg、小学、高中等)。
- 当我们可以提出一个标签编码器,将接近的标签分配给相似的类别时:这会减少树的分裂,从而减少执行时间。
- 当数据集中的分类特征数量巨大时:One-hot 编码具有大量值的分类特征会导致 (1) 高内存消耗和 (2) 模型很少使用非分类特征的情况。如果您使用稀疏矩阵,则可以处理第一种情况。如果您仅使用特征子集构建树,则可能会出现第二种情况。例如,如果您有 9 个数字特征和 1 个具有 100 个唯一值的分类特征,并且您对该分类特征进行一次热编码,您将获得 109 个特征。如果只使用特征子集构建树,则很少使用最初的 9 个数字特征。在这种情况下,您可以增加该子集的参数控制大小。在 xgboost 中,它在 sklearn 的随机森林 max_features 中称为 colsample_bytree。
其它你可能感兴趣的问题