我是Haskell的新手,我正在尝试执行以下操作: 给定的List数据类型结构为: data Lan a = Nan | Can a (Lan a) deriving Show data Lan a = Nan | Can a (Lan a) deriving Show 最后我做到了 ...
提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供 中文繁体 英文版本 中英对照 版本,有任何建议请联系yoyou2525@163.com。
我正在尝试使用以下代码最大化功能:
from scipy.optimize import minimize
from scipy.stats import lognorm, norm
import numpy as np
np.random.seed(123)
obs = np.random.normal(loc=20, scale=3, size=20)
# Log-Posterior optimisation objectiv
def objective(params, y):
mu = params[0]
sigma = params[1]
llikelihood = np.sum(np.log(norm.pdf(y, mu, sigma)))
lpost = llikelihood + np.log(norm.pdf(mu, 0, 100)) + np.log(lognorm.pdf(sigma, loc= 0, s = 4))
return -1*lpost
starting_mu = 0
starting_sigma = 1
optim_res = minimize(fun = objective, x0=(starting_mu, starting_sigma), args=(obs))
该代码可以很好地运行到最后的优化行。 我非常有信心,错误是我尝试像R中那样进行优化,使用相同的设置和观察结果, objective()
得出的值相同。 此外,使用optim()
函数确实optim()
值优化为mu = 21.6和sigma = 3.28。
我可以使用R代码,但是,在Python中运行该代码会更容易,以便它可以与我正在做的所有其他事情集成。
编辑:追溯消息是:
dert2@ma0phd201803:~$ python laplace_approx.py
laplace_approx.py:12: RuntimeWarning: divide by zero encountered in log
lpost = llikelihood + np.log(norm.pdf(mu, 0, 100)) + np.log(lognorm.pdf(sigma, loc= 0, s = 4))
laplace_approx.py:12: RuntimeWarning: divide by zero encountered in log
lpost = llikelihood + np.log(norm.pdf(mu, 0, 100)) + np.log(lognorm.pdf(sigma, loc= 0, s = 4))
laplace_approx.py:12: RuntimeWarning: divide by zero encountered in log
lpost = llikelihood + np.log(norm.pdf(mu, 0, 100)) + np.log(lognorm.pdf(sigma, loc= 0, s = 4))
/opt/anaconda3/lib/python3.7/site-packages/numpy/core/fromnumeric.py:83: RuntimeWarning: invalid value encountered in reduce
return ufunc.reduce(obj, axis, dtype, out, **passkwargs)
快速调试程序后发现, norm.pdf(y, mu, sigma)
在一次迭代中返回了一个nan
数组。 在同一迭代中, lognorm.pdf(sigma, loc=0, s=4)
返回零。 甚至在此之前, sigma
被分配为负值。 这确实是问题开始的地方。 确切地跟踪为什么要使用负的params[1]
值调用该函数会花费一些精力,但这确实发生了。 我将使用调试器来逐步执行minimize
功能,以查看发生了什么。 我相信负值会在第9次调用时传递给函数,如果有帮助的话。 用于优化功能的方法可能不适用于您的特定功能。 您可以尝试使用通过分配给method
参数选择的其他method
(有关更多详细信息,请参见文档)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.