【问题标题】:Finding the optimal combination of inputs that produce the optimal outputs寻找产生最优输出的最优输入组合
【发布时间】:2021-10-27 13:52:57
【问题描述】:

我正在做一个涉及 10 个输入(X1、X2、...、X10)并预测 3 个输出(Y1、Y2、Y3)的项目。我在 Python 中使用 Keras 包和 Tensorflow 的后端。我已经建立了一个人工神经网络,经过训练,并展示了不错的预测。

但是,现在我需要确定 10 个输入的哪种组合将产生 Y1 的最低值、Y2 的最高值和 Y3 的最低值。本质上,我需要找到 10 个输入值来产生最佳输出。

我读过遗传算法可能是实现这一点的一种方法,但我不确定如何实现这一点。任何建议、见解或示例将不胜感激。

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。

标签: python tensorflow optimization neural-network regression


【解决方案1】:

遗传算法

可以使用遗传算法来完成此操作。
请注意,遗传算法最大化适应度函数,因此如果您尝试使用遗传算法来最小化某些东西,您的适应度函数需要与您的预期输出成反比:

假设域为(0, inf) 的可能的示例适应度函数

def fitness(Y1, Y2, Y3):
    return ( 1 / Y1 ) * (Y2) * (1 / Y3)

这将为 Y1 和 Y3 建立相同的优先级,并且要使三个数字的乘积最大化,Y1 和 Y3 都必须尽可能接近 0,并且 Y2 必须最大化。

为了澄清,上述适应度函数可能不适合您的用例,但用于演示适应度函数如何将权重应用于每个参数。

这是一个很好的 GA 演练的链接。 Solving the Traveling Salesman using a GA.

粒子群优化

或者,您可以使用粒子群优化(PSO),它执行类似于 GA 的操作,但会找到最小化函数的参数。

随机梯度下降 (SGD)

如果您对输出有域限制,您还可以使用自定义损失函数(或 MSE、欧几里得距离等)来测量域限制和实际输出之间的损失,或者只使用与您相同的适应度函数会用于早期的方法。
然后,您可以通过网络进行反向传播,以确定哪个输入变量对输出损失的影响最大并使用 SGD。
假设有域限制,我希望这种方法能提供最好的结果,否则,它们的性能应该大致相同,并且很大程度上取决于您使用什么作为适应度函数。

蒙特卡洛

您也可以采用蒙特卡洛方法。

【讨论】:

    猜你喜欢
    • 2023-03-24
    • 2013-07-30
    • 2018-11-28
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 2012-07-13
    • 1970-01-01
    相关资源
    最近更新 更多