在我的数据集中,一列的类别很多。对于模型训练或构建,我们需要将这些类别转换为数字。我们可以使用几种方法将标签转换为数字、单热编码和标签编码器,但这里我的问题是类别不是有序的(无需保留顺序)。我们可以使用 one-hot 编码,但它会创建大量维度。在这种情况下,我需要选择哪种方法才能有效地将类别转换为数字?它不应该影响模型的尺寸。
请就此案提出建议。提前致谢。
在我的数据集中,一列的类别很多。对于模型训练或构建,我们需要将这些类别转换为数字。我们可以使用几种方法将标签转换为数字、单热编码和标签编码器,但这里我的问题是类别不是有序的(无需保留顺序)。我们可以使用 one-hot 编码,但它会创建大量维度。在这种情况下,我需要选择哪种方法才能有效地将类别转换为数字?它不应该影响模型的尺寸。
请就此案提出建议。提前致谢。
使用适当的交叉验证策略计算的目标编码对于高基数分类特征也很有效。
在某些情况下,频率编码也很有用。
编码分类变量的标准方法是一种热编码。用数字替换类别(序数编码)肯定会在模型中引入错误,因为它依赖于对分类值毫无意义的数字比较。
如果实例数量太少和/或变量具有太多稀有值,则维度数量过多可能会成为问题。风险是过度拟合:该模型将依赖偶然发生的值,因为它没有足够大的代表性样本。一般来说,解决方案是简化数据:替换稀有值(那些出现少于训练集中的次数),例如具有特殊值other。请注意,您可以通过改变阈值来调整维数. 很可能有很多稀有值和较少的频繁值,因此这种方法可以快速减少维数。注意阈值可以通过参数调整来确定,但在这种情况下,您需要一个单独的验证集(不同于最终的测试集)。
请注意,您必须始终仅使用训练数据定义编码,然后在测试集上应用预定义的编码。如果测试集包含训练集中不存在的值,则同样应将其替换为特殊值other。
[编辑] 请注意,以上所有内容都是关于此案例的潜在问题和可能解决方案的非常通用的建议。像往常一样,这在很大程度上取决于任务和数据的细节。找到最佳方法的唯一方法是进行实验(感谢 Sammy 提醒我提及这一点)。