我正在做一个项目,涉及10个输入(X1, X2,…), X10)并预测3个输出(Y1, Y2, Y3)。我正在使用Python中的Keras包与Tensorflow的后端。我已经建立了一个人工神经网络,经过训练,并展示了不错的预测。
然而,现在我需要确定10个输入的哪种组合将产生Y1的最低值,Y2的最高值和Y3的最低值。实际上,我需要找到10个输入值来产生最佳输出。
我读过遗传算法可能是实现这一目标的一种方法,但我不确定如何实现这一目标。如有任何建议、见解或例子,我们将不胜感激。
遗传算法
遗传算法可以用来完成这一点。
注意GAs最大化适应度函数,因此,如果您试图使用GA最小化某些东西,您的适应度函数需要与期望输出成反比:
假设域为(0, inf)
def fitness(Y1, Y2, Y3):
return ( 1 / Y1 ) * (Y2) * (1 / Y3)
这将为Y1和Y3建立相等的优先级,并且为了使三个数字的乘积最大化,Y1和Y3必须尽可能接近0,而Y2必须最大化。
澄清一下,上面的适应度函数可能不适合您的用例,但用于演示适应度函数如何必须将权重应用于每个参数。
这是一个很好的GA演练的链接。用遗传算法求解旅行推销员问题。
粒子群算法
或者你可以使用粒子群优化(PSO),它做一些类似于GA的事情,但找到最小化的参数一个函数。
随机梯度下降(SGD)
如果你对你的输出有域限制,你也可以使用一个自定义的损失函数(或MSE,欧几里得距离等)来测量你的域限制和你的实际输出之间的损失,或者只是使用你在以前的方法中使用的相同的适应度函数。
然后,您可以通过网络反向传播,以确定哪个输入变量对输出损失的影响最大,并使用SGD。
假设域限制,我希望这种方法能给出最好的结果,否则,它们都应该表现得差不多,并且在很大程度上取决于你使用什么作为适应度函数。
蒙特卡罗
你也可以考虑蒙特卡罗方法。