首页 > 解决方案 > 一种用于销售预测和内核的热编码已死

问题描述

我正在尝试每天预测销售额,并拥有一个数据集 858935x15 特征。在为模型提供特征之前,我想对分类特征进行一种热编码。产品相关特征 color、product_id、brand_id、category_id 和 subcategory_id 以 int64 格式提供,具有以下唯一值;

------唯一值的计数-----

  1. productid -> 19359
  2. 颜色 -> 2243
  3. 类别 ID -> 101
  4. 布兰迪德-> 868
  5. 子类别-> 103

如果我对这些特性进行 one-hot 编码,内核将死去,数据集变为 17.5GB OO

我想,问题是 product_id 的唯一值计数,我是否严格需要对分类特征执行编码,或者我可以保留它们,因为它们特别适用于 product_id?

标签: pythonsalesforceone-hot-encodingforecast

解决方案


我可以把你的问题分成两部分。

  1. 如何防止内核死机。

当超过存储限制时它会死掉。当您生成近 20000 个新列时,它肯定会起作用。根据我卑微的经验,我可以说 one-hot 编码对于特性来说将是一种非常粗鲁的技术,color而且brandid,因为 1000 个新特性会显着破坏你的数据。我建议您使用可以完美处理分类特征的算法:基于树的算法,例如随机森林(请参阅sklearn 实现)或梯度提升方法。(请参考LightGBM 库

  1. 处理分类特征的其他方法。

如果你坚持使用线性或基于神经的模型,有一种神奇的技术叫做均值编码。您可以按特征的每个唯一值对观测值进行分组,并将特征值替换为每个组的目标变量的平均值。这种技术确实会丢失一些包含在特征中的信息,但是,它不需要数据集的膨胀。本文解释了使用这种方法的利润。

希望能帮助到你。


推荐阅读