pandas - 如何在 Pandas 中不使用 One-Hot-Encoding 重新编码 53k 个唯一地址(保存为对象)?
问题描述
我的数据框有 380 万行和 20 个左右的特征,其中许多是分类的。在减少功能数量后,我可以“虚拟化”一个包含 20 个左右类别的关键列,并且我的 COLAB(据称)运行 TPU 不会崩溃。
但是还有另一列包含大约 53,000 个唯一值。试图“假装”这个功能会使我的会话崩溃。我不能放弃这个专栏。
我查过目标编码,但数据集非常不平衡,我担心目标泄漏。有没有解决的办法?
编辑:我的目标变量是一个简单的二进制变量。
解决方案
在不了解问题/功能的更多细节的情况下,没有明显的方法可以做到这一点。这是数据科学/机器学习的一部分,它是一门艺术,而不是一门科学。几个想法:
- 一个热编码所有内容,然后使用降维算法删除一些列(PCA、SVD 等)。
- 只有一个热编码一些值(比如将其限制为 10 或 100 个类别,而不是 53,000 个),然后对于其余的,使用“其他”类别。
- 如果可以为这些变量构建嵌入(并非总是可能),您可以对此进行探索。
- 按某些基础功能对列中的值进行分组/分箱。即,如果该功能类似于
days_since_X
,则将其装箱 100 或其他东西。或者,如果它是动物的名称,请按类型(哺乳动物、爬行动物等)将其分组
推荐阅读
- javascript - 如何将对象绘制到charts.js
- linux - Linux 本地丢弃 UDP 数据包(接收缓冲区溢出)
- python - 在 python3 中自动执行 Cloud Firestore 导出
- amazon-web-services - 如何找出谁在 AWS 上创建了 ec2 实例?
- coldfusion - 如何使用
- c# - 如何修复 winmgmt 错误代码 0x8007007E?
- node.js - 在 Node Js 命令提示符窗口中找不到模块
- autosys - 如何将工作依赖与开始时间结合起来
- python - 按唯一 ID 分组、应用函数并为下一组更新特定列
- angular - Angular:如何处理 null ElementRef?