为什么在使用scipy算法L-BFGS-B时会得到非正定的Hessian?

时间:2018-08-13 12:09:07

标签: python optimization scipy hessian

我正在使用L-BFGS-B方法使用scipy Optimiz.minimize函数来处理需要优化的3个参数的问题。

def negative_log_likelihood(params):
    """Compute log likelihood

    :param params:    vector of params b1, b3 and alpha

    :return: negative_log probability
    """

     OC_pred = 12 * (params[0] * aCH + params[1] * aCOH + COOH) / params[2]
     t=-(Y-OC_pred)**2/(2*sigmas**2)-np.log(sigmas)
     L=-np.sum(t)
     return(L)

bnds = ((0.33, 0.5), (0.33, 1),(0.5, 1))
sol=scipy.optimize.minimize(log_, (0.4, 0.65, 0.75),method='L-BFGS-B',bounds=bnds)

其中aCH,aCOH,COOH,Y和sigma是一些固定变量。现在,我将在最优化点获得黑森州矩阵的对数行列式。为此,我使用解中给出的粗麻布逆的近似值,计算其逆,然后使用cholesky分解获得。如:

x = np.matrix([[1, 0,0], [0, 1,0],[0,0,1]])
l = sol.hess_inv.matmat(x)
t = np.linalg.inv(l)
chol = np.linalg.cholesky(t)
log_det_hess = np.sum(np.log(np.diag(chol)))

但是,当我尝试计算cholesky分解时,有时会出现矩阵不是正定的错误。那怎么可能?在L-BFGS-b算法中,粗麻布矩阵是在正定的前提下近似得到的。

有人知道为什么有时会出现该错误吗?

0 个答案:

没有答案