2015-11-03 79 views
1

给定一个返回健身测量值的Python可调参数(0.0 =可怕的,0.5 = ok,1.0 =完美)并描述其参数(type = bool | int | float | nominal,min,max)什么是参数优化器的健壮实现,它可以找到尽可能高的适应性度量的参数组合?我并不是在寻求一个全面保证的全局最优解。近似值会很好。Python中的参数优化

我见过scipy的optimize模块引用了很多,但也scikit学习的gridsearch。这两者之间的实际区别是什么?什么是其他选项?

+0

我已经使用了很多gridsearch。你是否希望优化管道中某些组件的参数?例如,gridsearch将允许您创建具有功能选择器和分类器的管道。 – AbtPst

+0

@AbtPst,我有一个图像处理管道,并且对于每个图像,我都手动设置了提供最佳/期望输出的参数。现在我试图找到一组适用于“大多数”图像的参数。我基本上只是试图概括我手动调整的参数。 – Cerin

+0

请看看这里http://stackoverflow.com/questions/33353228/feature-selection-using-logistic-regression/33422387?noredirect=1#comment54753653_33422387 – AbtPst

回答

2

给定一个参数空间和任务来寻找最佳值,gridsearch可能是最容易做的事情:分离参数空间,并通过蛮力检查所有组合。返回产生最佳结果的参数组合。

这种方法很有效,但正如您可以想象的那样,这并不能很好地扩展。对于高维优化问题,这根本不可行。

这里改进的策略取决于您拥有的附加信息。在最佳情况下,您可以优化平滑和可微的功能。在这种情况下,您可以使用数值优化。

在数值优化例程中,您可以利用函数的梯度总是向上的事实。所以如果你想增加函数值,只要简单地跟随渐变,只要渐变不为零,你就会一直提高。

这个强大的概念在scipy的大部分例程中被利用。通过这种方式,您可以通过利用有关当前位置附近的附加信息来优化高维功能。

所以,如果你没有一个平滑和差分功能,scipy的数值例程不能使用。

请注意,利用当前参数向量附近的信息也可以用于非光滑优化。基本上你做同样的事情:你检查一下当前估计值附近的一个窗口,并尝试通过在该窗口中找到更好的值来改善。