一种用于销售预测和内核的热编码死了

One hot encoding for sales prediction and kernel died

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

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

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

如果我对这些功能进行单热编码,内核将死,数据集将变为 17.5GB O.O

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

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

  1. 如何防止内核死机

当超过存储限制时它会死亡。当您生产将近 20000 个新色谱柱时,它肯定会起作用。根据我的微薄经验,我可以说 one-hot 编码对于 colorbrandid 特征来说也是一种非常粗鲁的技术,因为 1000 个新特征会显着破坏你的数据。我建议你使用可以完美处理分类特征的算法:tree-based算法,例如Random Forest(请参考sklearn implementation) 或 梯度提升方法。 (请参考LightGBM library)

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

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

希望对您有所帮助。