给定一个可调用的Python,它返回一个适合度度量(0.0=可怕,0.5=好,1.0=完美)及其参数描述(type=bool|int|float|nominal,min,max),参数优化器的哪些稳健实现可以找到使适合度度量尽可能高的参数组合?我不是在寻找一个详尽的、有保证的全局最优。近似值就可以了。
我看到了很多关于scipy的优化模块的参考,还有scikit-learn的网格搜索。这两者之间的实际区别是什么?还有什么其他选择?
给定一个参数空间和寻找最优值的任务,网格搜索可能是你能做的最简单的事情:离散化参数空间,并通过强力检查所有组合。返回产生最佳结果的参数组合。
这是可行的,但正如你所能想象的,这并不能很好地扩展。对于高维优化问题,这根本不可行。
此处的改进策略取决于您所掌握的其他信息。在最佳情况下,你优化了一个光滑且可微的函数。在这种情况下,可以使用数值优化。
在数值优化例程中,你可以利用函数的梯度总是指向上的事实。因此,如果你想增加函数值,你只需遵循梯度一点,只要梯度不为零,你就会一直改进。
这个强大的概念在scipy
的大多数例程中都得到了利用。通过这种方式,你可以通过利用你获得的关于你当前位置附近的额外信息来优化高维函数。
因此,如果没有光滑的微分函数,就不能使用scipy
的数值例程。
请注意,利用当前参数向量附近的信息也可以用于非平滑优化。基本上,你也会做同样的事情:你检查一个关于你当前估计的窗口,并试图通过在该窗口中找到更好的值来改进。