用于多输出回归的神经网络

数据挖掘 神经网络 回归 张量流
2021-10-07 22:12:03

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

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

我想知道这个问题是否可以只使用一个模型来解决,特别是使用神经网络。

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

我正在使用 TensorFlow。我有代码,但我认为了解我在多层感知器理论方面遗漏了什么更为重要。

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

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

3个回答

您所描述的是正常的多维线性回归。这类问题通常通过前馈网络(MLP 或任何其他适合问题性质的架构)来解决。

任何神经网络框架都能够做这样的事情。

做到这一点的关键是记住最后一层应该有线性激活(即根本没有激活)。

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

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

您可以在 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 和 1 之间)。

如果你使用 Keras,这样做的方法是添加一个密集层作为最终输出层:

model.add(Dense(8, activation='linear'))