如何结合分类和连续输入特征进行神经网络训练

数据挖掘 神经网络 特征选择 分类数据 特征构造
2021-09-22 23:38:31

假设我们有两种输入特征,分类的和连续的。分类数据可以表示为one-hot代码A,而连续数据只是N维空间中的向量B。似乎简单地使用 concat(A, B) 不是一个好的选择,因为 A, B 是完全不同类型的数据。例如,与B不同,A中没有数字顺序。所以我的问题是如何组合这两种数据,或者有没有常规的方法来处理它们。

事实上,我提出了一个如图所示的简单结构

在此处输入图像描述

如您所见,前几层用于将数据 A 更改(或映射)到连续空间中的某个中间输出,然后将其与数据 B 连接,从而在连续空间中为后续层形成新的输入特征。我不知道这是合理的还是只是一个“试错”游戏。谢谢你。

3个回答

解决这个问题的主要方法有以下三种:

  1. 分别构建两个模型,然后训练一个集成算法,该算法接收两个模型的输出作为输入
  2. 将所有数据连接到单个向量/张量中作为预处理步骤,然后训练一个简单的单个输入 NN
  3. 您提出的多输入 NN 架构

集成方法是最直接的选项,并且会产生不错的结果,但是,它不会像您提出的选项那样工作,因为集成网络仅接收来自两个网络的类概率作为输入,并且与您的比较方法错过了数据类型之间更复杂的关系。

第二种方法在理论上与您提出的方法没有什么不同,不同之处在于它假设网络将自行确定输入由两种类型的数据组成(因为它们都在同一个向量/张量中)。网络需要大量的训练时间才能学习到这一点,而且在此之前你可能会陷入局部最小值。

根据我的个人经验,您提出的网络是最佳选择,因为它可能具有最短的训练时间,一旦您获得正确的架构,您会发现在生产中训练和维护(重新训练)网络非常容易,以及您将只需要重新训练一个模型。

到目前为止,我一直在使用您提出的幼稚结构。在一个框架良好的问题和足够的数据中,这种类型的架构工作得很好。但是,这里有一些我学到的东西:

  1. 基于树的算法(RF、XGB)通常在混合类中表现良好,除非您有一些特定的输出要求或更容易通过神经网络实现的损失函数。
  2. 如果决定使用神经网络,那么与其他类型的字符串编码方式相比,这种架构的性能更好。
  3. 这种方法也适用于混合输入时间序列数据——比任何经典的时间序列方法都要好得多。

关键设计将是连接层以及您希望将其放在架构中的什么位置。使用嵌入层还可以为您在其他一些任务/可视化中使用这些学习嵌入提供额外的好处。

这些类型的架构已在Kaggle 比赛中使用,并且还在Jeremy Howard 教授的 Fast.ai 课程中教授

正如@Tadej Magajna 已经说过的那样,有不同的解决方案。我想添加一篇关于如何在 keras 中实现第三种方法的帖子:

在(深度)神经网络中结合数字和文本特征