我正在使用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算法中,粗麻布矩阵是在正定的前提下近似得到的。
有人知道为什么有时会出现该错误吗?