Почему я получаю неположительный определенный гессиан при использовании scipy алгоритма L-BFGS-B?

Я использую scipy optimize.minimize функцию с помощью метода L-BFGS-B для задачи с оптимизируемыми 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 и sigmas - некоторые фиксированные переменные. Теперь я хотел бы получить логарифмический определитель гессианной матрицы в оптимизированной точке. Для этого я использовал приближение обратного значения гессиана, заданного в решении, вычислил его обратный и использовал холеское разложение для получения. Например:

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)))

Однако иногда я ошибаюсь, что матрица не является положительно определенной, когда я пытаюсь вычислить холескопическое разложение. Как это возможно? Матрица hessian аппроксимируется во время алгоритма L-BFGS-b, используя предположение, что оно положительно определено.

Кто-нибудь знает, почему я иногда получаю эту ошибку?

0
задан 13 August 2018 в 15:18

0 ответов

Другие вопросы по тегам:

Похожие вопросы: