让我们假设一个对数似然函数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 或任何其他考虑这种类型的有界优化的包中还有其他方法。请帮忙。