gpt4 book ai didi

python - Scipy 的 fmin 有时只粘在 inf 上

转载 作者:行者123 更新时间:2023-11-30 23:49:44 25 4
gpt4 key购买 nike

我正在使用 Scipy 的 fmin search计算分布对某些数据的拟合可能性的对数。我使用 fmin 来搜索最大化对数似然的参数,如下所示:

j = fmin(lambda p:-sum(log(likelihood_calculator(data, p))), array([1.5]), full_output=True)

(likelihood_calculator 获取数据和参数,并为每个数据点输出一组似然值。)

如果我们使用产生似然值为 0 的参数开始搜索,则对数似然为 -inf,因此 -sum 为 inf。 fmin 应该远离初始参数,但它会坚持该值以达到最大调用次数,然后返回它:

In [268]: print j
(array([ 1.5]), inf, 67, 200, 1)

我认为这可能是 fmin 处理 infs 的问题,但如果我们删除似然计算器并直接给出 0,我们会得到更好的行为:

In [269]: i = fmin(lambda p: -sum(log(p)), array([0]), full_output=1)
Warning: Maximum number of function evaluations has been exceeded.

In [270]: i
Out[270]: (array([ 3.16912650e+26]), -61.020668415892501, 100, 200, 1)

如果我们使用零数组、这些零是 float 或者使用 fmin_bfgs,也会发生同样的正确行为。如果我们使用 fmin_bfgs,函数调用也会出现同样的错误行为,但如果我们从不产生 0 可能性(以及任何 infs)的参数开始,fmin 就会正确工作。

想法?谢谢!

更新:

如果有很大范围的参数导致为零,我们可以将参数值推到边缘。如果参数足够接近边缘,fmin 将离开零域并开始搜索。前任。 p<1 = Inf,则在 p=.99 时 fmin 将起作用,但在 p=.95 时则不起作用

最佳答案

也许您的更新可以回答这个问题。由于 fmin 使用下坡梯度算法,因此它会在初始猜测的邻域中搜索最速下降的方向。如果您足够深入到函数始终返回 inf 的参数区域,那么算法就看不到该往哪个方向走。

关于python - Scipy 的 fmin 有时只粘在 inf 上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7534653/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com