给定一个返回适应度测量值(0.0=可怕、0.5=正常、1.0=完美)的 Python 可调用函数及其参数描述(type=bool|int|float|nominal、min、max),什么是稳健的参数优化器的实现可以找到获得尽可能高的适应度测量的参数组合?我并不是在寻找一个详尽的有保证的全局最优值。一个近似值就可以了。
我看过 scipy 的 optimize module引用了很多,还有scikit-learn的gridsearch 。这两者之间有什么实际区别?还有什么其他选择?
最佳答案
给定参数空间和找到最佳值的任务,网格搜索可能是您可以做的最简单的事情:离散化参数空间并通过强力检查所有组合。返回产生最佳结果的参数组合。
这可行,但正如您可以想象的那样,这不能很好地扩展。对于高维优化问题,这是根本不可行的。
此处的改进策略取决于您拥有哪些附加信息。在最佳情况下,您可以优化平滑且可微的函数。在这种情况下,您可以使用数值优化。
在数值优化例程中,您可以利用函数的梯度始终向上的事实。因此,如果你想增加函数值,你只需跟随梯度一点点,只要梯度不为零,你就会一直进步。
这个强大的概念在大多数 scipy
例程中得到了利用。这样,您就可以通过利用获得的有关当前位置邻域的附加信息来优化高维函数。
因此,如果您没有平滑和微分函数,则无法使用 scipy
的数值例程。
请注意,利用当前参数向量附近的信息也可用于非平滑优化。基本上你做同样的事情:你检查当前估计周围的一个窗口,并尝试通过在该窗口中找到更好的值来改进。
关于python - Python 中的参数优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33504183/