【问题标题】:RuntimeWarning in scipy.optimize.minimize when trying to MLE fit Weibull distribution尝试 MLE 拟合 Weibull 分布时 scipy.optimize.minimize 中的 RuntimeWarning
【发布时间】:2022-01-14 19:32:06
【问题描述】:

我有以下函数to_minimize,它应该等于 Weibull 分布的数据集的对数似然,在 d 处从左侧截断。

import numpy as np
from scipy.optimize import minimize

def to_minimize(args, data, d=1):
  theta, tau = args
  n = len(data)
  if tau <= 0 or theta <= 0:
    pass
  term1 = n * (np.log(tau) - tau * np.log(theta) - (-d / theta) ** tau)
  term2 = 0
  for x in data:
    term2 += (tau - 1) * np.log(x) + (-x / theta) ** tau
  return term1 + term2

data = numpy.random.rand(100)
weibull = minimize(lambda args: -to_minimize(args, data),
                   x0=np.array((1., 1.)), bounds=np.array([(1e-15, 10), (1e-15, 10)]))

据我所知,唯一会导致表单错误的事情

RuntimeWarning: invalid value encountered in double_scalars

如果 tau 或 theta 为 0,则应该是。但这些参数的界限特别高于 0,那么为什么我的优化例程会崩溃?

【问题讨论】:

    标签: python optimization scipy statistics


    【解决方案1】:

    在调用np.seterr(all='raise') 并进行更多调试后,我注意到我的计算出现了错误。指数函数中的- 必须在幂之后应用。否则它会尝试取负数的根,这显然是行不通的。

    【讨论】:

      猜你喜欢
      • 2012-08-02
      • 2013-07-03
      • 2018-08-21
      • 2016-06-05
      • 1970-01-01
      • 2016-12-10
      • 2018-06-04
      • 2016-04-26
      • 2020-01-03
      相关资源
      最近更新 更多