gpt4 book ai didi

python - 使用 scipy 最小化函数

转载 作者:太空宇宙 更新时间:2023-11-04 05:56:21 24 4
gpt4 key购买 nike

我有一个对数似然函数,它是一长串客户和一些单独的对数似然函数的总和,我想使用 scipy.optimize.minimize() 方法对其进行优化。

def log_likelihood_individual(r, alpha, a, b, x, tx, t):
ln_a1 = gammaln(r + x) - gammaln(r) + r * log(alpha)
ln_a2 = gammaln(a + b) + gammaln(b + x) - gammaln(b) - gammaln(a + b + x)
ln_a3 = -(r + x) * log(alpha + t)
a4 = 0
if x > 0:
a4 = exp(log(a) - log(b + x - 1) - (r + x) * log(alpha + tx))
return ln_a1 + ln_a2 + log(exp(ln_a3) + a4)


def log_likelihood(r, alpha, a, b, customers):
if r <= 0 or alpha <= 0 or a <= 0 or b <= 0:
return -np.inf
c = sum([log_likelihood_individual(r, alpha, a, b, x, tx, t) for x, tx, t in customers])
return c


def maximize(customers):
negative_ll = lambda params: -log_likelihood(*params, customers=customers)
params0 = np.array([1., 1., 1., 1.])
res = minimize(negative_ll, params0, method='CG')
return res

我尝试使用 scipy 列表的各种算法,但每次,算法都会迷失方向。谁能给我一个关于如何解决这类问题的一般性建议,即最小化我无法真正理解的函数?

最佳答案

一般性问题会引发一般性回答;)

我的大多数拟合尝试都失败了(即不收敛),因为条件不佳的初始值。问问自己:

  • params0 = np.array([1., 1., 1., 1.]) 真的是一个很好的初始猜测吗?
  • 您是否也尝试过 params0 = np.array([0., 0., 0., 0.]) 或任何其他组合(蛮力)
  • 您能否创建一个您知道参数理想值的示例集?你试过适应它吗?

如果以上都不行,问题似乎更复杂,但90%的拟合问题都可以通过回答以上问题来解决。

关于python - 使用 scipy 最小化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27562569/

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