在热编码变量或单因素变量上运行 xgboost 是否有区别?

机器算法验证 机器学习 分类数据 Python 助推
2022-03-31 16:12:33

我有一个数据集,它有一个分类“产品”列。它有大约 1000 个不同的值。

我可以直接将其转换为整数(例如 1-1000)并将此列用作单个变量,还是应该将其转换为所有产品的虚拟编码 1/0 作为列?这有什么不同吗?

1个回答

是的,它有所作为。没有好的答案,你应该两个都试试。如果您正在寻找性能,您甚至可能需要尝试各种编码并使用不同的编码堆叠模型......

另一种方法可能是用目标的条件平均值替换因子(出现次数相对较多)。

编辑。

至于为什么,原因在于boosting是基于决策树的。

想象一下,因子列代表一个国家。如果将其编码为整数,则决策规则将读取为if country > 10. 这些组将代表与前 10 个国家不对应的所有国家(并且编码顺序很重要)。

另一方面,如果您使用虚拟变量对其进行编码,则生成的规则将是if country10 > 0.5(这可能对应于特定的国家:)country10 == 1现在(如果在生长树时不对列进行子分类),无论编码如何,模型的性能都是相同的。

走向最佳整数编码?

你有关于产品的信息吗?或者它只是一个ID?如果您可以将产品范围设置为 1-100,例如手机、101-300 辆汽车、301-1000 本书,它可能有助于您的算法找到具有实际意义的组(现在规则if product > 300自动引用所有书籍。 .. 绝对不能保证使用这种方法提高性能。