我正在尝试使用scipy.optimize.minimize来最小化二次目标函数:. 首先,我通过定义一个函数,使用内置的 Nelder-Mead Simplex 算法成功地实现了这一点:
def objective(x):
Q = np.asmatrix(DF.cov()) # Covariance matrix
x = np.asmatrix(x)
return x.transpose() * Q * x
传递给 SciPy 的最小化函数:
minimize(objective, x0, method='Nelder-Mead',options={'xtol': 1e-6, 'disp': True})
现在,按照上面链接中的文档,还有许多其他可用的优化例程,我想尝试一下。其中每一个都需要计算函数导数,,必须写在类似于上面的python函数里面,有的需要Hessian. 我最初的尝试如下:
def der_objective(x):
Q = np.asmatrix(DF.cov()) # Covariance matrix
x = np.asmatrix(x).reshape(len(Q),1)
return 2 * Q * x
但这显然会返回错误的尺寸。我不完全确定 SciPy 如何期望结果,并且无法从教程中的 Rosenbrock 示例中解决。
您能否解释一下 SciPy 教程中的 rosen_der 示例是如何工作的(例如,为什么它对给定的? 形状相同的向量?)以及我应该如何设计我的 der_objective(x) 函数来实现相同的目标?