scipy.optimize.curve_fit对初始猜测非常敏感

时间:2015-10-01 14:27:15

标签: python optimization scipy

我有一个关于我应该使用哪种优化功能的基本问题。我有:

  1. 我的系统模型实现为python函数。这个 函数采用一维数组并输出一维数 数组,也需要一些参数(通常小于 10)。

  2. 具有未知输入的该函数的噪声样本输出 参数。

  3. 每个参数的下限和上限。

  4. 我想要的是什么:

    一个优化例程,它允许我抛出所有上述内容并获得最佳拟合函数参数。

    我想将该功能视为一个黑盒子,所以不要假设它是连续的。

    我对scipy.optimize.curve_fit函数运气不错,但它似乎很容易受到初始猜测的偏差。 curve_fit也没有让我提供输入的界限,我认为这将极大地简化问题。这是我与curve_fit一起使用的代码:

    import numpy as np
    from scipy import optimize
    
    def model(x, c, d):
        res = np.sqrt((d/2.0)**2 - (x-c)**2) + (d/2.0)
        res[np.isnan(res)] = 0
        return res
    
    x = np.arange(-1000, 1000, 200)
    y = model(x, 0, 250)
    y_noise = y + np.random.rand(len(y)) * 20 - 10
    
    popt, pcov = optimize.curve_fit(model, x, y_noise, (50, 200))
    

    上面的代码返回(50,200)作为优化参数,这是错误的。如果我将初始猜测从(50,200)更改为(49,200),那么它返回的优化参数是(1.84747802,247.18634951),这足够接近(0,250)的真实性

    在线研究似乎表明RBF或最小二乘可以帮助我。但是我无法将问题视为“最小化”。

    上面用正确的函数调用我的模型的一个例子将非常感激,因为一般指针可以帮助我更多阅读。

    提前致谢。

0 个答案:

没有答案