【问题标题】:Python, scipy, curve_fit, bounds: How can I constraint param by two intervals?Python,scipy,curve_fit,bounds:如何将参数约束两个间隔?
【发布时间】:2016-10-18 13:56:33
【问题描述】:

我正在使用 scipy.optimize.curve_fit 来拟合数据的 sigmoidal 曲线。我需要绑定 [-3, 0.5] 和 [0.5, 3.0] 中的参数之一

我尝试了无边界拟合曲线,接下来如果参数小于零,我再次拟合边界 [-3, 0.5] 而与 [0.5, 3.0] 相反

是否可以将函数curve_fit与两个区间绑定?

【问题讨论】:

  • 我认为不可能将参数与curve_fit 绑定,但您可能对提供此功能的lmfit 包感兴趣。
  • 我说得太乐观了——现在我想起来了,没有直接的方法在lmfit 中施加两个间隔约束。也许您可以尝试创建两个相关参数,其中一个从另一个缩放 -1 系数?

标签: python scipy curve-fitting


【解决方案1】:

不,least_squares(因此 curve_fit)仅支持框约束。

【讨论】:

    【解决方案2】:

    有一种粗略的方法可以做到这一点,那就是如果参数超出多个界限,则让您的函数返回非常大的值。例如:

    sigmoid_func(x, parameters):
        if parameter outside multiple bounds:
            return 1.0E10 * len(x) # very large number
        else:
            return sigmoid value
    

    如果参数超出您的多重界限,这会产生非常大的错误。如果你有 [upper, lower] tou 的单界范围,则不应使用此方法,因为最新版本的 scipy 已经支持更常见的单界范围类型的问题。

    【讨论】:

      猜你喜欢
      • 2016-04-16
      • 2021-07-13
      • 1970-01-01
      • 2014-09-05
      • 2016-09-16
      • 2017-04-08
      • 2013-10-12
      • 1970-01-01
      • 2019-07-03
      相关资源
      最近更新 更多