如何确定输入和输出变量之间的数学关系?

人工智能 机器学习 数学
2021-11-13 14:51:21

我想接受一些输入值n变量,比如说R,B, 和G. Y表示这些的响应变量n输入(在这个例子中,我们有3输入)。除此之外,我想使用参考/目标值来比较结果。

现在,假设输入之间的关系(R,BG) 与输出Y是(假设):

Y=R+B+G

但是系统/机器不知道这种关系。它只能读取其输入,R,BG, 和输出,Y. 此外,系统还提供了参考值,例如,REF=30(认为​​)。

机器的目的是找到其输入和输出之间的这种关系。为此,我在网上遇到了一些非常有用的材料,例如论坛查询G. Cybenko的 Sigmoidal 函数的叠加近似,认为这是可能的。另外,我怀疑多项式回归可能会像建议的那样有帮助Here

我想到的一种模糊方法是使用真值表之类的方法来以某种方式推断输入对输出的影响,从而得到一个函数。但我既不确定如何进行,也不相信它的可信度。

是否有任何替代/已经存在的方法来实现这一目标?

3个回答

总是有大量可能的函数可以产生一组给定的输入输出值。挑战在于找到一个最简单的函数(根据您选择的任何标准)来产生这些值。

一种方法是编写输入变量的通用函数,包括 R、G 和 B 中的所有阶项,每个项都有一个系数,然后搜索系数值 A) 再现已知的输入-输出值准确和 B) 使最大数量的系数等于零。

可以使用几种不同的算法来有效地进行搜索。我的选择是一种遗传算法,用于寻找生成的和已知的 IO 值之间的 RMS 差异的最小值,并与逐渐增加的参数和非零系数的数量相加。

正如我看到你的解释,你正在寻找什么可以通过另一种方式来说明

Y = aX + b

其中 Y 是输出向量,X 输入向量和 a & b 是您要查找的系数。

为什么这样?发生了什么?

首先第一件事:我建议观看视频 [4],了解矩阵和向量如何协同工作并在乘法后形成非常熟悉的方程:

Y = a1 * x1 + a2 * x2 + a3 * x3

现在您看到了,您不仅获得了 R + G + B,而且还获得了为每个变量提供的一些常量。

关于多项式解决方案,我发现 [2] 和 [3],但通读 [3],您很快就会发现它是完全不同的方法:

Y = a1 * x + a2 * x^2 + a3 * x^3

你不想要的。

因此,您会找到一种叫做线性回归的东西和一个所谓的深度神经网络来解决它 [1]。

我将在这些步骤中总结来源 [1]:

  • 你必须找到一些训练数据。当 X 值已知时,这是正确 Y 值的示例。

  • 然后,您在 Python 笔记本中构建一些代码,其中包含:具有隐藏层、激活函数、反向传播和目标函数的神经网络。

  • 对数据进行多次迭代,称为训练。

网上有很多关于这些细节的示例和课程,但是有了正确的工具和教程,几十行就不需要了。

过程以验证阶段结束,其中包含一些更已知的数据项和结果。它可以告诉您估计模型的效果如何。


最后说明:

正如您可能观察到的,该解决方案包含许多有趣的术语,您必须在掌握任务之前以某种方式学习。例如 Udemy 有关于这个主题的很棒的在线课程,其他网站上也有免费的教程。与你目前所掌握的知识相比,你的计划听起来相当雄心勃勃,所以我真的建议你多学一点,以便能够对已经给出的在线示例进行微调。例如教程 [5] 包括一个。一开始是相当复杂的代码,需要大量练习才能逐行掌握。


简而言之:

找到你最喜欢的教程,稍微研究一下神经网络(基础),然后选择代码示例开始实验。这是一段很长的路,但它是值得的。


来源:

[1] https://lightsapplications.wordpress.com/linear-regression-and-deep-learning/

[2] https://www.ritchieng.com/machine-learning-polynomial-regression/

[3] https://arachnoid.com/polysolve/

[4] https://www.youtube.com/watch?v=F2lJ7oSwcyY

[5] https://missinglink.ai/guides/neural-network-concepts/backpropagation-neural-networks-process-examples-code-minus-math/

前段时间我找到了解决方案。我一直在研究函数逼近(在线性回归中)一段时间。我是这样做的:

神经网络已被证明是通用函数逼近器因此,即使是单个隐藏层也足以逼近一个简单的加法函数(即使是有点复杂的函数,如Sine任何随机 CONTINUOUS wiggly 函数也已被逼近)

首先,我使用了像 TensorFlow 和 Keras 这样的高级 API 并在这里实现了它

该模型在数据(输入-输出对)上进行了训练

R    = np.array([-4, -10,  -2,  8, 5, 22,  3],  dtype=float)
B    = np.array([4, -10,  0,  0, 15, 5,  1],  dtype=float)
G    = np.array([0, 10,  5,  8, 1, 2,  38],  dtype=float)

Y    = np.array([0, -10, 3, 16, 21, 29, 42],  dtype=float)

并训练如下:

#Create a hidden layer with 2 neurons
hidden = tf.keras.layers.Dense(units=2, input_shape=[3])

#Create the output (final) layer which symbolises value of **Y**
output = tf.keras.layers.Dense(units=1)

#Combine layers to form the neural network and compile it
model = tf.keras.Sequential([hidden, output])
model.compile(loss='mean_squared_error', optimizer=tf.keras.optimizers.Adam(0.1))
history = model.fit(RBG,Y, epochs=500, verbose=False)

该模型在大约 50 个 epoch 内收敛

在此处输入图像描述

此外,我仅使用 C/C++ 实现了相同的功能,并使用 GNU plot 来可视化结果。