将输入组的大小放大或缩小到神经网络中

数据挖掘 机器学习 神经网络 火炬 降维 编码
2022-02-17 01:37:06

假设您有两个输入(X1 和 X2)要用于预测 Y。

您不确定 X1 和 X2 对于预测 Y 的重要性,但您假设是偶数。

One-hot 编码对于 X1 来说是一个很好的策略,它会产生一个大小为 10,000 的向量。

X2 是介于 0 和 1 之间的无符号整数,因此您可以按原样传递它。

所以你的网络看起来像

10,001 -> {some hls} -> Out-layer

从理论上讲,与 X1 相比,它可以“学习”为 X2 赋予很多重要性,但实际上我认为当尺寸差异如此之大时,这很难。至少基于我测试的一些数据集,这肯定是正确的。

对于这个问题,我能想到的一个“简单”解决方案是让网络形状更像:

10,000 -> {some hls} -> 1,000 --
                               |
                               |-> {some hls} -> Out-layer
                               |
1 -> {some hls} ------> 1,000 --

所以基本上有一些编码器/骨干网/无论你想调用它们,它们都会增加/减少某些输入组的大小,并与普通网络同时训练它们。

我的问题是:

a)我在这里发现的问题是“真实的”问题还是在实践中不会出现?b) 它有名称吗?是否已经建立了解决方案?c)我在这里提出的解决方案是“好”吗?d) 你有实际使用这种方法的网络示例吗?最好在 pytroch 中实现,但这并不重要,按说实现似乎很容易。f) 该解决方案在性能和/或实施方面是否存在可能不明显的潜在缺陷?

1个回答

我在这里看到的主要问题是 OHE 对于这么多类别几乎从来都不是一个好主意。使用神经网络,您通常会通过使用嵌入获得更好的性能。所以而不是

X1 -{OHE}-> 10,000 -> {..} -> 1,000您可以直接进入X1 -{embedding}-> 50,其中嵌入维度可能远低于 1,000。

无论哪种方式,更重要的是在一个连贯的框架中计算特征重要性。最简单的可能是排列重要性(另一个可能是 shap 值),它基本上归结为(重复)打乱输入特征 X1 和 X2 并记录对 Y 的影响。如果您确保打乱 X1,这也适用于 OHE 变量在 one-hot 编码之前(而不是独立地洗牌 10,000 个编码向量)。在这样的框架中,X2 不需要为了与 X1 进行公平比较而被“放大”。