Python 从分数函数中找出哪些输入产生最高值

Python 从分数函数中找出哪些输入产生最高值,python,machine-learning,calculus,Python,Machine Learning,Calculus,我有一个函数,它返回一个基于输入计算的分数。下面是一个非常简单的例子 def score(i, j): if i <= 2 and j <= 3: return i * j return 0 但如果理想值是浮点数呢?如果它们在0和4的边界之外呢?如果我有3个要查找的输入怎么办 这感觉像是一个机器学习和微积分问题,但我不熟悉一个可以工作的实现。我想象一个在x轴和y轴上有I和j的2D图形,以及一些显示每个坐标分数(I,j)值的热图。该算法将在该图中搜索局

我有一个函数,它返回一个基于输入计算的分数。下面是一个非常简单的例子

def score(i, j):
    if i <= 2 and j <= 3:
        return i * j
    return 0
但如果理想值是浮点数呢?如果它们在0和4的边界之外呢?如果我有3个要查找的输入怎么办


这感觉像是一个机器学习和微积分问题,但我不熟悉一个可以工作的实现。我想象一个在x轴和y轴上有
I
j
的2D图形,以及一些显示每个坐标
分数(I,j)
值的热图。该算法将在该图中搜索局部最大值(类似于机器学习搜索局部最小损失值)。如果您能深入了解这将是什么样子,或者搜索什么内容,我们将不胜感激。

您正在寻找的可能是黑盒优化或。问题公式是优化一些你不知道分析形式的函数(一个黑匣子,你只能计算函数的输入),你不能(直接)访问导数。请注意,这些方法不能保证找到全局最优值

有几种方法可以做到这一点,最简单的一种方法适用于浮点数,就像它适用于整数示例一样。定义等间距栅格,在每个栅格点计算函数,并跟踪最大值。然而,如果你不知道函数的边界或者你的函数是高维的,这种方法的伸缩性很差,可能无法找到任何“好”的最优值。一个稍微好一点的方法是定义一个非均匀或随机的点网格,然后调用它,它在高维中的伸缩性更好。受物理学启发的更复杂版本是。然而,不知道边界的问题仍然存在

一种更复杂的方法是类似的算法。简言之,这类算法在每个迭代步骤中提出一代点,从这些点中选择最佳点,并基于所选点提出下一代点。通常情况下,这是通过提出一个概率函数(例如,正态)并使用最大似然法对所选点进行优化,以优化这些函数的参数来实现的。这里的优点是,您不必预先定义或知道函数的边界

优化此类黑盒函数的第三种方法是,如果评估后盒函数的成本很高或存在噪声,则该方法特别有用。我们的想法是为函数提出一个先验函数来进行优化,在某些点进行测量(这是关键部分),并更新我们对实际函数的看法。这通常是通过使用高斯过程作为一类函数以迭代方式完成的。老实说,对于您的简单示例来说,这种方法有点过头了

def score(i, j):
    if i <= 2 and j <= 3:
        return i * j
    return 0
为了说明关于神经网络的最后一点:神经网络是函数逼近器,也就是说,它们可以表示任何函数,从一些输入空间映射到一些输出空间,输入和输出已经给定(数据和标签)。NN是参数化的,具有分析形式已知的损失函数(例如均方误差、交叉熵等)。因此,可以使用访问导数的方法来寻找最佳参数。在您的情况下,函数已经给定(虽然没有分析形式),您希望找到使其最大化的输入。

我最后使用了
黑框。search\u min
方法。