结合具有不同特征但相同目标的神经网络

我有一个关于如何创建神经网络(或类似)架构的问题,以实现以下目标:

示例

假设我有一个使用特征1和特征2来预测目标的模型。由于可用的训练样本中特征1和特征2的数量有限,该模型表现不佳。

如果我有另一个使用特征3和特征4的神经网络,我的目标是预测相同的目标,我该如何将两个模型的学习结合起来,做出相同的目标预测?

这种情况在其他几个具有不同特征但共同目标的数据集上继续发生。

解释

我这样做是因为不是每个训练样本都包含特征1、2、3和4,因此无法将其纳入单一模型中。但唯一共同点是这些模型都在尝试预测相同的目标。

问题

对于这种问题,哪种机器学习策略(不仅仅是神经网络)最合适?


回答:

您描述的模型由两个核心子模型组成。

  1. 多个依赖于特征的编码器,每个特征集一个。特征1和2可以由模型的一部分结合成某种隐藏表示。特征3和4将被转换成相同的隐藏表示,但会使用不同的子模型和不同的参数集进行拟合。

  2. 一个独立于特征的解码器,位于隐藏表示之上,用于预测您的目标。

在拟合模型时,每个编码器只能使用具有所需特征集的数据。它正在为这些特征拟合一个表示,因此需要看到它们。但解码器可以用于您所有的数据。这将捕捉到目标的分布,因为您的目标是共同的。

当您认为存在有意义的隐藏表示时,这种模型是合适的。也就是说,您认为您的特征集是在以不同方式测量类似的东西。

这允许您保持编码器较小,因为它只是在进行从一种测量方式到另一种测量方式的小转换。从测量转换到目标可能仍然很困难,但因为这部分逻辑在公共解码器中,所以它可以从所有训练数据中受益。


为了具体说明,这种模型的一个很好的使用案例是如果您的特征是widthheightvolumeweight。假设您的目标是运输cost

可以合理地说,中间表示可以通过size的概念很好地描述。并且也可以合理地说,无论您最初是如何测量size的,从sizecost的转换本身就是一个有趣的问题。

因此,模型的公式看起来像这样:

# Feature encoders.size ~ width + heightsize ~ volume + weight# Target decoder.cost ~ size

现在,我在描述模型设计时一直小心避免对模型类型的任何承诺。但您确实将这个问题标记为与神经网络特别相关,我认为这是一个好的选择。

对于您的简单示例,使用PyTorch,模型可能看起来像这样:

import torch.nn as nnimport torch.nn.functional as Fclass MultiEncoderSingleDecoder(torch.nn.Module):    def __init__(self, hid_sz):        super().__init__()        self.using_encoder = 0        self.encoders = torch.nn.ModuleList([            torch.nn.Linear(2, hid_sz),            torch.nn.Linear(2, hid_sz),        ])        self.decoder = torch.nn.Linear(hid_sz, 1)    def set_encoder(self, use_encoder):        self.using_encoder = use_encoder    def forward(self, inp):        encoder = self.encoders[self.using_encoder]        return self.decoder(F.relu(encoder(inp)))

然后使用可能如下所示:

model = MultiEncoderSingleDecoder()model.set_encoder(0)# 在第一个特征集上进行一些训练model.set_encoder(1)# 在第二个特征集上进行更多训练# ...

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注