我有一个数据集,它有一个分类“产品”列。它有大约 1000 个不同的值。
我可以直接将其转换为整数(例如 1-1000)并将此列用作单个变量,还是应该将其转换为所有产品的虚拟编码 1/0 作为列?这有什么不同吗?
我有一个数据集,它有一个分类“产品”列。它有大约 1000 个不同的值。
我可以直接将其转换为整数(例如 1-1000)并将此列用作单个变量,还是应该将其转换为所有产品的虚拟编码 1/0 作为列?这有什么不同吗?
是的,它有所作为。没有好的答案,你应该两个都试试。如果您正在寻找性能,您甚至可能需要尝试各种编码并使用不同的编码堆叠模型......
另一种方法可能是用目标的条件平均值替换因子(出现次数相对较多)。
编辑。
至于为什么,原因在于boosting是基于决策树的。
想象一下,因子列代表一个国家。如果将其编码为整数,则决策规则将读取为if country > 10
. 这些组将代表与前 10 个国家不对应的所有国家(并且编码顺序很重要)。
另一方面,如果您使用虚拟变量对其进行编码,则生成的规则将是if country10 > 0.5
(这可能对应于特定的国家:)country10 == 1
。现在(如果在生长树时不对列进行子分类),无论编码如何,模型的性能都是相同的。
走向最佳整数编码?
你有关于产品的信息吗?或者它只是一个ID?如果您可以将产品范围设置为 1-100,例如手机、101-300 辆汽车、301-1000 本书,它可能有助于您的算法找到具有实际意义的组(现在规则if product > 300
自动引用所有书籍。 .. 绝对不能保证使用这种方法提高性能。