如何正确建模 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 等激活函数)而不是回归神经网络(使用逻辑回归或整流等激活函数线性单位)。
我正在尝试制作一个 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 等激活函数)而不是回归神经网络(使用逻辑回归或整流等激活函数线性单位)。