混淆两个python优化功能

时间:2018-11-24 12:41:25

标签: python machine-learning scipy

当我在Python中遇到两个优化函数时,我正在训练我的多类分类器,一个是scipy.optimize.fmin_cg,另一个是scipy.optimize.minimize。我阅读了文档,但想不通。两者之间的基本区别是什么?在哪种情况下应该使用它们?

1 个答案:

答案 0 :(得分:2)

如果您转到minimize函数(doc)的文档,则在参数列表之后,将使用对描述细节的文章的引用来指定方法。

您实际上可以在其中找到以下行:“方法CG使用非线性共轭梯度算法”,这正是fmin_cg所做的。因此,minimize是一个更通用的功能,它可以使用不同的功能,通过选择cg,它将与更具体的fmin_cg功能相同。 (在fmin_cg的文档中,您可以确切地阅读以下内容:“通向所有scipy.optimize算法的通用接口,以实现无约束和无约束的多元函数最小化。它通过指定method ='CG'提供了另一种调用fmin_cg的方法。 。”

那么,您什么时候应该使用fmin_cg?文档中也回答了这一问题:“共轭梯度方法在以下情况下往往会更好地工作:

  • f有一个唯一的全局最小化点,没有局部最小值或其他固定点,
  • f至少在局部上可以通过变量的二次函数很好地近似,
  • f是连续的并且具有连续的梯度,
  • f'不太大,例如范数小于1000,
  • 初始猜测x0相当接近f的全局最小化点xopt。”

您什么时候应该使用minimize?最小化只是优化算法的集合。因此,真正的问题是什么时候应该使用其他东西。好吧,请阅读文档中有关方法的说明,然后尝试找出答案。可能会找到minimize将要调用的特定方法(如本例中的fmin_cg),以进行更详细的说明。