【问题标题】:Fitting a curve with a pivot point Python用枢轴点Python拟合曲线
【发布时间】:2016-06-05 09:37:25
【问题描述】:

我有下面的图,我想用 2 行来拟合它。使用 python 我设法适应上部:

def func(x,a,b):
    x=np.array(x)
    return a*(x**b)
popt,pcov=curve_fit(func,up_x,up_y)

我想用另一条线拟合下部,但我希望这条线穿过红色星星的点,所以我可以有一个连续的功能。所以我的问题是如何通过给出函数必须通过的点来使用curve_fit,但让线的斜率由python计算? (或任何其他能够做到这一点的python包)

【问题讨论】:

    标签: python machine-learning linear-regression curve-fitting data-fitting


    【解决方案1】:

    您的模型在对数空间中可能的逐步参数化类似于:

    (x>q)*((x-q)*a)+(x<q)*((x-q)*c)+b
    

    其中q 是扭结的位置,ac 是两个部分的斜率,b 是全局 y 偏移量。由于模型具有不连续性,基于梯度的最小化器可能不是找到最佳拟合的最佳选择。不过我尝试了scipy.optimize.leastsqscipy.odr 并得到了很好的结果。

    【讨论】:

      【解决方案2】:

      您可以查看piecewisepwlf。下面是一个使用分段的例子,它可以自动拟合多个段。

      from piecewise.regressor import piecewise
      import numpy as np
      
      x = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ,11, 12, 13, 14, 15,16,17,18], dtype=float)
      y = np.array([5, 7, 9, 11, 13, 15, 28.92, 42.81, 56.7, 70.59, 84.47, 98.36, 112.25, 126.14, 140.03,120,112,110])
      
      model = piecewise(x, y)
      

      评估'model'得到以下输出:

      FittedModel with segments:
      * FittedSegment(start_t=1.0, end_t=7.0, coeffs=(2.9999999999999996, 2.0000000000000004))
      * FittedSegment(start_t=7.0, end_t=16.0, coeffs=(-68.2972222222222, 13.888333333333332))
      * FittedSegment(start_t=16.0, end_t=18.0, coeffs=(198.99999999999997, -5.000000000000001))
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-10-10
        • 1970-01-01
        • 2013-11-08
        • 1970-01-01
        • 1970-01-01
        • 2019-01-06
        • 2021-03-21
        • 2017-01-02
        相关资源
        最近更新 更多