我需要优化一个功能(找到它的最小值)。该函数使用向量w
进行参数化。所以我基本上做的是我根据每个参数计算函数的偏导数。然后我只是使用梯度下降。但据我所知,人们可以使用比梯度下降更复杂的优化方法,这些方法不需要参数来调整或关注。我想在numpy
或scipy
中尝试其中一种方法,但我无法弄清楚如何。我需要的是一种方法,它接受计算的偏导数值作为输入,然后它优化函数。 numpy
或scipy
中是否存在类似的内容?
答案 0 :(得分:2)
scipy.optimize.minimize
为您提供输入目标函数的雅可比矩阵和Hessian的选项:
jac : bool or callable, optional
雅可比(渐变)的目标函数。仅适用于CG,BFGS,Newton-CG,L-BFGS-B,TNC,SLSQP,dogleg,trust-ncg。如果jac是布尔值并且为True,则假定fun会返回梯度以及目标函数。如果为False,将以数字方式估计梯度。 jac也可以是一个可调用的,返回目标的梯度。在这种情况下,它必须接受与fun相同的参数。 hess,
hessp : callable, optional
目标函数的Hessian(二阶导数矩阵)或目标函数的Hessian乘以任意向量p。仅适用于Newton-CG,dogleg,trust-ncg。只需要给出hessp或hess中的一个。如果提供了hess,那么hessp将被忽略。如果没有提供hess和hessp,那么将使用jac上的有限差分来近似Hessian乘积。 hessp必须将Hessian时间计算为任意向量。
正如@ffriend在评论中所提到的,你可以找到一些有和没有渐变here的例子。