如何正确建模ANN以找出实际值输入输出数据之间的关系?

时间:2015-06-23 11:46:16

标签: neural-network

我试图制作一个ANN,它可以告诉我输入和输出数据之间是否存在因果关系。数据如下:
我的输入是一个区域中农药的测量值(总共19个),例如:

 -1.031413662  -0.156086316    -1.079232918    -0.659174849    -0.734577317    -0.944137546    -0.596917991    -0.282641072    -0.023508282    3.405638835 -1.008434997    -0.102330305    -0.65961995 -0.687140701    -0.167400684    -0.4387984  -0.855708613    -0.775964435    1.283238514

输出是同一地区植物的测量值(总共55个),例如:

0.00   0.00    0.00    13.56   0   13.56   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   13.56   0   0   0   1.69    0   0   0   0   0   0   0   0   0   0   1.69    0   0   0   0   13.56   0   0   0   0   13.56   0   0   0   0   0   0

输入值的范围为-2.5到10,输出的值范围为0到100。 因此,我试图回答的问题是:农药A在何种程度上影响植物的生长。

有什么好的方法可以模拟(表示)输入/输出神经元,以便能够处理上述输入/输出数据?如何扩展/转换输入/输出数据对NN有用?

我应该看一本书/纸吗?

1 个答案:

答案 0 :(得分:1)

首先,神经网络无法找到输出和输入之间的因果关系,而只能找到相关性(就像其他所有概率方法一样)。因果关系只能从逻辑上推导出来(即便如此,它并不总是很清楚,这完全取决于你的公理)。

其次,关于如何设计神经网络来建模数据,这是一个非常简单的规则,通常可用于制作第一个工作草案:

  • 设置输入神经元的数量=一个样本的输入变量数
  • 设置输出神经元的数量=一个样本的输出变量数
  • 然后玩隐藏层的数量和每个隐藏层隐藏神经元的数量。在实践中,您希望使用最少数量的隐藏层/神经元来正确建模您的数据,但足以使您的神经网络近似的函数正确拟合数据(否则输出中的误差将比实际输出更大)数据集)。

为什么你需要使用足够的神经元而不是太多?这是因为如果您使用大量隐藏的神经元,您肯定会过度填充数据,因此您将对训练数据集进行完美预测,但在使用真实数据集的情况下则不会。从理论上讲,这是因为神经网络是一个函数逼近器,因此它可以逼近任何函数,但使用过高的阶函数会导致过度拟合。有关详细信息,请参阅PAC学习。

因此,在您的确切情况下,首先要做的是澄清每个样本的输入和输出中有多少变量。如果输入为19,则创建19个输入节点,如果有55个输出变量,则创建55个输出神经元。

关于缩放和预处理,是的,您应该在0到1之间对数据进行规范化(或者-1和1取决于您,这取决于激活函数)。一个非常好的起点是在machine learning course by Andrew Ng at Coursera观看视频,这应该让您快速启动并且正确(您将学习用于检查您的神经网络是否正常工作的工具这是非常重要和有用的。)

注意:您应该检查输出变量,从您给出的样本看来它们似乎使用离散值:如果值是离散的,那么您可以使用离散输出变量,这将比使用真实变量更精确和更具预测性,浮动值(例如,不是将[0,1.69,13.56]作为可能的输出值,你将有[0,1,2],这称为“分级”或多类分类)。在实践中,这意味着您必须通过使用分类神经网络(使用sigmoid等激活函数)而不是回归神经网络(使用逻辑回归或整流线性单位等激活函数)来改变网络的工作方式。 / p>