python - 一种用于销售预测和内核的热编码已死
问题描述
我正在尝试每天预测销售额,并拥有一个数据集 858935x15 特征。在为模型提供特征之前,我想对分类特征进行一种热编码。产品相关特征 color、product_id、brand_id、category_id 和 subcategory_id 以 int64 格式提供,具有以下唯一值;
------唯一值的计数-----
- productid -> 19359
- 颜色 -> 2243
- 类别 ID -> 101
- 布兰迪德-> 868
- 子类别-> 103
如果我对这些特性进行 one-hot 编码,内核将死去,数据集变为 17.5GB OO
我想,问题是 product_id 的唯一值计数,我是否严格需要对分类特征执行编码,或者我可以保留它们,因为它们特别适用于 product_id?
解决方案
我可以把你的问题分成两部分。
- 如何防止内核死机。
当超过存储限制时它会死掉。当您生成近 20000 个新列时,它肯定会起作用。根据我卑微的经验,我可以说 one-hot 编码对于特性来说将是一种非常粗鲁的技术,color
而且brandid
,因为 1000 个新特性会显着破坏你的数据。我建议您使用可以完美处理分类特征的算法:基于树的算法,例如随机森林(请参阅sklearn 实现)或梯度提升方法。(请参考LightGBM 库)
- 处理分类特征的其他方法。
如果你坚持使用线性或基于神经的模型,有一种神奇的技术叫做均值编码。您可以按特征的每个唯一值对观测值进行分组,并将特征值替换为每个组的目标变量的平均值。这种技术确实会丢失一些包含在特征中的信息,但是,它不需要数据集的膨胀。本文解释了使用这种方法的利润。
希望能帮助到你。
推荐阅读
- java - 思科精巧通知服务
- sql - 没有在 PostgreSQL 中以特定格式获取日期时间
- ssh - cisco ISR 4431. tty 线路的传输输入 ssh
- python - 如何使用 bash 脚本停止当前正在运行的 docker?
- ios - 对泛型“Map”的引用需要 <...> 中的参数 - Swift
- jdbc - flink impala jdbc插入很慢
- asp.net - Visual Studio - ASP.NET Core React JS 模板无法正常启动
- javascript - 根据用户名用户替换url页面
- python - 如何将时间值与熊猫列中的所有时间值进行比较?
- reactjs - React:无法对未安装的组件执行反应状态更新。使用`useLocation()`时