多重输出回归的神经网络


21

我有一个包含34个输入列和8个输出列的数据集。

解决问题的一种方法是采用34个输入并为每个输出列建立单独的回归模型。

我想知道是否可以仅使用一种模型(特别是使用神经网络)解决该问题。

我使用了多层感知器,但是它需要多个模型,就像线性回归一样。序列到序列可以可行吗?

我正在使用TensorFlow。我有代码,但我认为了解多层感知器理论所缺少的内容更为重要。

我了解在MLP中,如果您有一个输出节点,它将提供一个输出。如果您有10个输出节点,那么这是一个多类问题。您从10个输出中选择概率最高的类。但是在我的情况下,可以肯定的是,相同的输入将有8个输出。

可以说,对于一组输入,您将获得某物(X,Y,Z)的3D坐标。就像,输入= {1,10,5,7}输出= {1,2,1}。因此,对于相同的输入{1,10,5,7},我需要为X值Y值和Z建立模型。一种解决方案是使用MLP具有3个不同的模型。但是我想看看我是否可以有一个模型。所以我考虑使用seq2seq。因为编码器接受一系列输入,而解码器提供一系列输出。但是似乎张量流中的seq2seq无法处理浮点值。我对此可能是错的。


您可能在理解多层感知器NN模型以及TensorFlow时遇到一些问题-您关于这些的陈述是不正确的。但是,尚不清楚您为什么会有这种误解,这意味着答案无法帮助您解决此问题。在大多数NN框架中,在单个NN模型中预测例如8个回归输出非常容易,在您的情况下无需序列。因此,我认为重要的一点是,为了帮助您,请仔细阅读上一段的基础-您能否添加一些您已经看到或尝试过的细节,才能得出自己的想法?
尼尔·斯莱特

您能否提供一个答案,如何使用一个单一的NN模型获得8个回归输出?谢谢。
sjishan

可能的话,如果您通过编辑问题来解释一些事情:1)在什么框架下?2)到目前为止,您的代码(或设计,如果没有代码)是什么?3)是什么阻止您自己这样做?我需要1和2才能回复您可以使用的功能。我需要3以便了解您的问题所在并解释解决方案。
尼尔·斯莱特

1. Tensorflow。2.我有代码,但我认为了解多层感知器理论所缺少的内容更为重要。我了解在MLP中,如果您有一个输出节点,它将提供一个输出。如果您有10个输出节点,那么这是一个多类问题。您从10个输出中选择概率最高的类。但是在我的情况下,可以肯定的是,相同的输入将有8个输出。让我展示一个不同的示例,让我们说,对于一组输入,您将获得某物(X,Y,Z)的3D坐标。就像,输入= {1,10,5,7}输出= {1,2,1}
sjishan

因此,对于相同的输入{1,10,5,7},我需要为X值Y值和Z建立模型。一种解决方案是使用MLP具有3个不同的模型。但是我想看看我是否可以有一个模型。所以我考虑使用seq2seq。因为编码器接受一系列输入,而解码器提供一系列输出。但是似乎张量流中的seq2seq无法处理浮点值。我对此可能是错的。
sjishan

Answers:


14

您所描述的是正常的多元线性回归。通常使用前馈网络(MLP或适合该问题性质的任何其他体系结构)解决此类问题。

任何神经网络框架都可以做类似的事情。

这样做的关键是要记住最后一层应该具有线性激活(即完全没有激活)。

根据您的要求,输入层的形状将是矢量(34,)和输出(8,)。

更新:用于回归问题的常用损失函数是均方误差(MSE)。是使用Keras的多维回归的一个例子; 该网络不是MLP,但可以说明这个想法。


1
可能值得添加一条关于回归的常规成本函数的线(均方误差)并指向TensorFlow回归示例-尽管我只花了10分钟来寻找一个,却什么也没看到。。。(示例从线性回归跳到MNIST分类器,但没有基本的MLP回归模型)。
尼尔·斯莱特

3

您可以在Python中非常简单地实现这一点。
您的X将是训练x,y,z坐标的集合。
您的Y将是测试x,y,z坐标的集合。

from sklearn import cross_validation                     
from sklearn.neural_network import MLPRegressor   

model = MLPRegressor(solver='lbfgs',alpha=0.001,hidden_layer_sizes=(150,))
cross_validation.cross_val_score(model, X, Y,scoring='mean_squared_error')

0

这比您想象的要容易得多-您可以简单地将输出层设置为向量而不是单个标量。当然,这里没有魔术,我建议您准备数据(执行批量归一化,以便所有输出的值都在0到1之间)。

如果您使用的是Keras,执行此操作的方法是通过添加一个密集层作为最终输出层: model.add(Dense(8, activation='linear'))

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.