大分类值的一种热门编码替代方案

数据挖掘 机器学习 数据集 数据框 降维 编码
2021-09-15 01:19:44

我有一个包含超过 1600 个类别的大分类值的数据框。有什么办法可以找到替代品,这样我就没有超过 1600 列?

我发现了这个有趣的链接

但是他们正在转换为我不想要的类/对象。我希望我的最终输出作为数据框,以便我可以使用不同的机器学习模型进行测试?或者,有什么方法可以使用生成的矩阵来训练除 Logistic 回归或 XGBoost 之外的其他机器学习模型?

无论如何我可以实现它吗?

4个回答

一种选择是将稀有值映射到“其他”。这通常在例如自然语言处理中完成 - 直觉是非常稀有的标签不具有太多的统计能力。

我还看到人们将 1-hot 分类值映射到低维向量,其中每个 1-hot 向量都重新表示为来自多元高斯的抽取。参见例如论文 Deep Knowledge Tracing,它说这种方法的动机是压缩感知的思想:

BARANIUK, R. 压缩传感。IEEE 信号处理杂志 24, 4 (2007)。

具体来说,它们将每个长度为 N 的向量映射到长度为 log2(N) 的较短向量。我自己没有这样做,但我认为这值得一试。

您可以读取数据并首先获取分类变量的所有唯一值的列表。然后,您可以在唯一值列表中安装一个热编码器对象(如 sklearn.preprocessing.CategoricalEncoder)。

此方法还可以在训练测试框架中或在您以块的形式读取数据时提供帮助。我创建了一个 python 模块,它可以自己完成所有这些工作。你可以在这个 GitHub 存储库中找到它 - dummyPy

一个简短的教程 -如何在 Python 中对分类变量进行热编码?

请参阅此链接(这也与具有很多唯一值的分类特征有关):

嵌入可以参考这个链接(不是我写的,但值得一看)。

您可以对相似的值进行分桶,以便保存最接近的值(或具有非常相似的)模式的值(或列)可以被一个值(或列)替换,因此您的 1600 个值可以归结为 400(甚至较少的)。

前任。对于像 (cloud like - Nimbus Clouds, drizzle, light rain, rain, heavy rain) 这样的值可以转换为(小雨,雨,大雨)。