我正在尝试使用以下代码最大化功能:

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)

#1楼 票数:0

快速调试程序后发现, norm.pdf(y, mu, sigma)在一次迭代中返回了一个nan数组。 在同一迭代中, lognorm.pdf(sigma, loc=0, s=4)返回零。 甚至在此之前, sigma被分配为负值。 这确实是问题开始的地方。 确切地跟踪为什么要使用负的params[1]值调用该函数会花费一些精力,但这确实发生了。 我将使用调试器来逐步执行minimize功能,以查看发生了什么。 我相信负值会在第9次调用时传递给函数,如果有帮助的话。 用于优化功能的方法可能不适用于您的特定功能。 您可以尝试使用通过分配给method参数选择的其他method (有关更多详细信息,请参见文档)。

  ask by Tom Pinder translate from so

未解决问题?本站智能推荐:

1回复

Python:功能最大化

假设我具有以下简单功能和输入: 我想将此函数求解为最小化输出(最大化e)。 但这会引发类型错误 我的问题是:i)这是解决此类功能最大值的好方法吗?ii)问题出在哪里?
1回复

使用python最大化多参数求和

我正在尝试使用两成分混合的weibull分布拟合风数据集v=v1,.....,vm 。 我发现了一篇论文,建议使用“最大似然法”,尤其是最大化以下等式: Omega , a1 , a2 , b1和b2是我要更改的参数,以使函数最大化,并且v=v1,.....,vm是一系列已知的风速。
1回复

Pythonlinprog可最大化目标函数

自从我这样做已经有一段时间了,所以我有点生锈,但是等式是: 我有约束条件是(1448x1359)的我的一个矩阵: 然后有绑定b (1448x1): 我的目标函数要最大化,它是1(1359,1)的向量。 现在在其他软件包中,我的最大目标函数是841,但是使用linprog: 它
1回复

使用Python最大化作业调度的利润

我有一个调度方案,其中每个时间段都有成本。 我需要选择能够在 24 小时内为我提供最低成本的时间段。 请参阅下面的日期集示例。 开始时间 | 结束时间 | 成本 00:00 | 01:00 | 30 美元 01:00 | 05:00 | 50 美元 02:00 | 08:00 |
1回复

使用scipy进行错误的优化(最大化)

我正在尝试使用scipy.optimize来确定3个参数(变量)的最佳值。 我从一个非常简单的优化函数开始,该函数将分析的参数与一些预定义的(过去的)值相加。 使用一些固定值来绑定值。 我正在处理最大化问题时,将sign参数的值设置为-1 。 但是,scipy返回[0, 0, 0]作为最
1回复

我正在尝试使用scipy.minimize解决具有约束和界限的最大化问题

我正在尝试使用 scipy 最小化 SLSQP 中的边界来解决约束最大化问题。 但是为什么我会收到此消息:“LSQ 子问题中的奇异矩阵 C”? 如何解决这个问题? 当我删除约束并尝试最小化目标函数时,它工作正常,但是当我尝试最大化它时,它显示“线搜索的正方向导数”。 代码如下:
1回复

在尝试最大化函数时,索引1超出了大小为1的轴0的范围

我正在尝试设置一个动态规划问题: 为了便于计算,参数的值是这样的,但它们当然会有所不同。 我得到的最新错误是:超出迭代限制我感谢任何帮助,如果问题不恰当,请告诉我以解决问题
2回复

通过两个参数最大化功能

我试图找到两个参数叫做 E B最大化函数f值(X,A,B),其中b> 0。 我这样写: 其中x是包含我的数据的数组。 我收到以下错误: 有人可以帮我吗?