【问题标题】:curve fitting in python is fitting in my curvepython中的曲线拟合适合我的曲线
【发布时间】:2020-12-06 04:41:20
【问题描述】:
def sigmoid_function(x1,k,xo,a,c):
    return (a/ (1+ np.exp(-k*(x1-xo))))+c

x_data=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35]

y_data =[0.08965066,0.08990541,0.090073960.09013885,0.09021248,0.09038204,
 0.09044601,0.09062396,0.09074469,0.09097924,0.09101625,0.09110833,
 0.09130073,0.09153685,0.09165991,0.09189038,0.09236043,0.09329333,
 0.09470363,0.09750811,0.10305867,0.11295684,0.12767181,0.14647349,
 0.16744916,0.18869261,0.20908784,0.22828775,0.2459888 ,0.262817,
 0.27898482,0.29499955,0.31033699,0.32526762,0.33972489]

result,covariance= optimize.curve_fit(sigmoid_function,x_data,y_data, maxfev=10000)

Curve with exact data Curve fit resut

我是 ml 新手,如果我可以更改 curve_fit() 中的任何参数,请告诉我。

【问题讨论】:

  • 首先更正你的 y_data 列表,查看第二个和第三个索引

标签: python curve-fitting


【解决方案1】:

如果您在观察范围内查看优化,那么优化功能似乎效果不佳。

但如果你缩小并查看优化函数的规模,情况看起来就完全不同了。

当没有为curve_fit 提供边界或优化方法时,它使用Levenberg-Marquardt,这可能无法找到全局解决方案。

在只有一个最小值的情况下,一个不知情的标准猜测,如 β = ( 1 ,
1 , ... , 1 ) 可以正常工作;在有多个最小值的情况下,只有当初始猜测已经有点接近最终解时,算法才会收敛到全局最小值。

您所看到的是优化函数落入局部最小值。就像上面所说的那样,您可以通过提供更接近解决方案的初始参数来解决这个问题,这样优化就可以避免那个最小值陷阱。例如通过这样做:

p0 = [0.1, 0.1, 0.1, 0.1]
result, convariance = optimize.curve_fit(sigmoid_function, x_data, y_data, p0)

优化函数的行为符合您的预期:

【讨论】:

    猜你喜欢
    • 2013-11-08
    • 2011-07-07
    • 2021-03-21
    • 1970-01-01
    • 1970-01-01
    • 2021-01-19
    • 2015-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多