除以在python中进行最小化时遇到的零



我有以下一段代码(更大代码的一部分):

import numpy as np
from scipy.stats import multivariate_normal 
from scipy.optimize import minimize as scipy_min
def f_loglike(x):
pmean = [1.54379044]
pCov = [[0.00013136]]
return -np.log(multivariate_normal(pmean[0],pCov).pdf(x))
scipy_min(f_loglike, 1, method='Nelder-Mead', tol=1e-6)

当我运行它时,我得到2个警告:RuntimeWarning: divide by zero encountered in logRuntimeWarning: invalid value encountered in subtract np.max(np.abs(fsim[0] - fsim[1:])) <= fatol):

,函数的输出为:

final_simplex: (array([[1.],
[1.]]), array([inf, inf]))
fun: inf
message: 'Maximum number of function evaluations has been exceeded.'
nfev: 200
nit: 67
status: 1
success: False
x: array([1.])

我不知道发生了什么(或如何调试它)。这应该是一个高斯函数的最小值(或高斯函数的最大值),这是微不足道的(答案应该是pmean)。同样,在高斯函数的公式中,假设协方差(在这种情况下是标准差)是固定的,没有任何地方可以除以0,所以第一个警告对我来说没有意义。谁能帮助我了解发生了什么以及如何修复它吗?谢谢你!

我根据SciPy文档稍微更改了函数并稍微更改了初始条件。我得到了一些运行的东西,可能是因为初始条件是从一个地方开始的在log()的参数中给出了零值。这是我得到的,但我不知道这是否是你想要的:

import numpy as np
from scipy.stats import multivariate_normal 
from scipy.optimize import minimize as scipy_min
def f_loglike(x):
pmean = [1.54379044]
pCov = [[0.00013136]]
return -np.log(multivariate_normal.pdf(x,pmean[0],pCov))
print(scipy_min(f_loglike, 1.5, method='Nelder-Mead', tol=1e-6))

它返回:

final_simplex: (array([[1.54379025],
[1.54379082]]), array([-3.54984592, -3.54984592]))
fun: -3.549845922780753
message: 'Optimization terminated successfully.'
nfev: 36
nit: 18
status: 0
success: True
x: array([1.54379025])

最新更新