我可以对数据进行分析并使用其累积密度分布中的百分位值,而不是对分类变量进行一次性编码吗?

数据挖掘 机器学习 数据挖掘 特征选择 特征工程
2021-09-14 20:00:28

对于具有数百万条记录的数据集,我有一个具有数千个值的分类变量。数据被用于创建二元分类模型。我处于特征选择的早期阶段,但我正在尝试随机森林、增强树和逻辑回归来看看什么是有效的。

如果我找到每个类别的频率并对其进行排序,我会发现大约 50 个值构成了前 80%。将此特征压缩为关于该值是否在该组值中的二进制文件是否有效。通过“有效”,我的意思是这种转换是否可能为模型保留任何有用的信息?我担心对这些没有任何顺序的分类值进行排序会产生一些不正确的假设。

频率分布看起来有点像这样:

A;10%
D;5%
E;1.2%
B;1.1%
...
Z;0.004%
W;0.0037%
...

更进一步,分析我的数据集中的每个类并做同样的事情是否有效?假设类别 AF 包含 0 类的前 80%,而类别 DH 是 1 类的前 80%。我会转换:

data_id;cat_var
1;B
2;F
3;H
4;Z

data_id;cat_var_top80class0;cat_var_top80class1
1;1;0
2;1;1
3;0;1
4;0;0

添加图片以希望清除这个想法。黄色是基于训练集的 0 类和 1 类的 cat_var(图片中的 ***_id)的预先计算的分布。右侧显示了如何应用转换: 按类别排序 ***_id 分布

1个回答

(在@DW 建议后编辑)。

据我所知,您的想法并没有错。因此它肯定是有效的。正如您所说,您必须尝试所有可能的思考方式,看看哪一种效果更好。采用特定编码的最重要的一点是要意识到您丢失了一定数量的信息,并且它会根据手头的问题因情况而异。例如,在基于高/低频子级别的二进制编码的情况下,会丢失大量信息(细节),这有助于算法进行分类。我喜欢你基于累积密度分布的百分位数编码的想法。也许您想查看pandas.qcut中提供的基于分位数的离散化。

其余的是我之前的回答(如下)。我打算建议在您想到的基础上尝试其他技术;但显然信息并不明确。请注意,我并不寻求将我的答案标记为最终答案,因为我知道它仍然不能完全回答您的问题;它只是集思广益和长篇大论交换意见。;-)

也许您已经充分了解了将分类变量转换为连续数据的方法。如果您没有并且错过了检查此答案,请检查一下。如前所述,它们是将 cat 转换为 num 的多种方法,而您的问题是许多领域中最困难但最常见的问题之一。您的分类变量具有很高的基数,据我了解,这些子级别的不平衡分布,您不确定弄乱这些子级别的顺序是否重要。您可能需要尝试我听说过但未尝试过的序数编码(如果顺序真的很重要)或证据权重 (WoE) 转换(例如,请参阅此博客文章),甚至超出以有意义的方式将它们混合以表示您的分类数据正确。

尽管在该领域付出了所有努力,但我了解到,这个问题仍然是数据科学和机器学习中的一个公开挑战。因此,据我检查,没有最佳解决方案或行之有效的方法。如果你遇到一个,请告诉我。