1

让我们假设一个对数似然函数f(x, y, z) = prob(k0)* log((1-x)^(1-y)) + prob(k1)*log((1-x)^(1-z))并且存在约束,使得 x、y 和 z 的可能值应位于 0 和 1 之间。目标是最小化函数并返回该最小值处的 x、y 和 z 值。

我尝试使用共轭梯度法 scipy 库。

   params = sp.optimize.minimize(fun=f, x0=initial_params, args=(data,), method='CG',
                                     jac=df,options={'gtol': 1e-05,'disp': True})

该方法在第一次迭代中失败。

Warning: Desired error not necessarily achieved due to precision loss.

由于有两个以上的变量,我是否需要提供 Hessian 矩阵?

我也尝试过 Nelder-mead 方法,但它需要很多时间。

params = sp.optimize.minimize(fun=f, x0=initial_params, method='Nelder-Mead', args=(data,),  options={'disp': True})

此外,更重要的是,该方法不考虑变量的界限,并在某些情况下返回未在界限内的 x、y 和 z 的值。我

在 scipy 或任何其他考虑这种类型的有界优化的包中还有其他方法。请帮忙。

4

1 回答 1

1

根据文档(查找scipy.optimize.minimize边界”参数),边界仅受 L-BFGS-B、TNC、SLSQP 和 trust-constr 方法支持。L-BFGS-B 应该是您的首选,它通常在大多数问题上都非常有效。

于 2019-05-09T14:56:41.643 回答