当特征在基数上有很大差异时,对高基数(多类别)分类特征进行编码

机器算法验证 分类 分类数据 降维 特征工程 多类
2022-03-20 22:07:48

我一直在查看有关分类特征编码的问题,但找不到任何讨论我的问题的问题。抱歉,如果我错过了。


假设我们有一个数据集,其中二元名义变量的重要性大致相同。

大多数分类器无法直接处理分类类型,因此必须对它们进行转换 - 例如使用此答案中解释的单热编码(虚拟变量) 。

  • 如果一个分类变量具有高基数,以这种方式编码它不会“压倒”其他(例如二进制)变量吗?“基数”是指名义变量中的类别数。

  • 如果我们的分类器模型知道变量之间的关系,它会不会不必要地尝试找到相同变量的引入的二进制虚拟“组件”之间的关系?

如果是这样,如何解决?

我能想到的最佳解决方案是在逻辑上将高基数属性分组到“桶”中,但是如果有足够多的唯一值成为问题,那么手动对它们进行分组也会很费力。


编辑:这是微不足道的,只是部分解决了问题,但我最终做的一件事是用一个新的“其他”类别替换所有相对罕见的分类值。当考虑价值“稀有”时优化阈值可能很耗时,但至少这种方法可以自动化。

1个回答

如果一个分类变量具有高基数,以这种方式编码它不会“压倒”其他(例如二进制)变量吗?

这取决于算法。

基于列采样的算法(随机森林、极其随机的树、梯度提升或袋装分类器......)在数据的子样本上训练了很多模型。如果 90% 的列代表“虚拟化”变量,则很可能大量模型实际上在处理相同的变量,因此,使它们比应有的相关性更高,从而提高了性能。

线性回归方法不会受到影响,它们只会为编码变量产生的每个二进制变量赋予权重。

对于最近邻和基于相似性的方法(例如内核 SVM),影响也应该是有限的。不管有多少列,最后唯一重要的是内积或两行数据之间的距离。但是,源自名义变量的列数,距离(或内积)只能是 0 或 1(名义变量是否相等)。

如果我们的分类器模型知道变量之间的关系,它会不会不必要地尝试找到相同变量的引入的二进制“组件”之间的关系?

您的分类器如何“意识到”变量之间的关系?我不确定我能否解决这个问题。

如果是这样,如何解决?

在任何依赖于列样本的方法的情况下,可以为列赋予先验权重(这样它们就不会以相同的概率被选择)。但是,我没有想到任何执行此操作的实现。快速修复可能是重复其他列,以便人为选择的可能性增加。