神经网络:一热变量压倒性连续?

机器算法验证 机器学习 神经网络 张量流 数据预处理 西阿诺
2022-03-22 22:07:52

我有大约 20 列(20 个特征)的原始数据。其中 10 个是连续数据,10 个是分类数据。一些分类数据可能有 50 个不同的值(美国各州)。在我对数据进行预处理后,10 个连续的列变成了 10 个准备好的列,10 个分类值变成了 200 个单热编码变量。我担心如果我将所有这 200+10=210 个特征都放入神经网络,那么 200-one-hot 特征(10 个分类列)将完全支配 10-continuous 特征。

也许一种方法是将列“分组”在一起或其他方式。这是一个有效的问题吗?是否有任何标准的方法来处理这个问题?

(我正在使用 Keras,虽然我认为这并不重要。)

2个回答

您可以使用不同于 one-hot 的方法对分类变量进行编码。二进制或散列编码器可能适合这种情况。散列特别好,因为您将所有类别编码为每个特征向量的单个表示,因此没有一个单独的占主导地位。您还可以指定最终表示的大小,因此可以将所有分类变量散列为 10 个特征,最终得到 20 个数字特征(半连续,半分类)。

两者都在https://github.com/scikit-learn-contrib/categorical-encoding中实现,或者直接自己实现。

您可以使用嵌入将大量分类变量转换为单个向量。这个压缩向量将是分类特征的分布式表示。分类输入将被转换为长度为 N 的相对较小的向量,其中包含 N 个实数,以某种方式表示描述所有输入的 N 个潜在特征。

考虑一下英语词典中的大量单词。如果这个数字是 N,那么我们可以将每个单词表示为长度为 N 的 one-hot-coded 向量。然而,word-to-vec能够在长度在 200-300 之间的向量中捕获几乎所有这些信息。