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

How to properly model ANN to find relationship between real value input-output data?

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

 -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

并且输出的是同一区域的plant-somthing的实测值(共55个)eg:

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 在多大程度上影响植物。

建模(表示)input/output 神经元能够处理上述 input/output 数据的好方法是什么?以及如何scale/convert input/output 数据对神经网络有用?

有没有我应该看的book/paper?

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

其次,关于如何设计神经网络来为您的数据建模,这里有一个非常简单的规则,可以普遍应用于制作第一份工作草案:

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

为什么你需要使用足够的神经元而不是太多?这是因为如果你使用大量隐藏神经元,你肯定会过度拟合你的数据,因此你将对你的训练数据集做出完美的预测,但在你使用真实数据集的一般情况下不会。从理论上讲,这是因为神经网络是一个函数逼近器,因此它可以逼近任何函数,但是使用太高阶的函数会导致过拟合。有关这方面的更多信息,请参阅 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],这称为 "binning" 或 multi-class 分类)。实际上,这意味着您必须改变网络的工作方式,使用 class化神经网络(使用 sigmoid 等激活函数)而不是回归神经网络(使用逻辑回归或整流等激活函数线性单位)。