【问题标题】:Not getting a proper curve fit for logistic function没有为逻辑函数获得适当的曲线拟合
【发布时间】:2022-09-24 20:02:27
【问题描述】:

我是新手,请帮助我,并提前感谢。我不适合此代码。

def cauchy(x, l, k, x1):
    return l / 1+np.exp(-k*(x-x1))
distance= [1000*0.001, 2000*0.001, 3000*0.001, 4000*0.001,5000*0.001,6000*0.001,7000*0.001,8000*0.001,
           9000*0.001, 11000*0.001, 12000*0.001, 13000*0.001, 14000*0.001, 15000*0.001, 16000*0.001,
           17000*0.001, 18000*0.001, 19000*0.001, 21000*0.001, 22000*0.001, 23000*0.001, 24000*0.001, 25000*0.001, 26000*0.001,
           27000*0.001, 28000*0.001, 29000*0.001, 30000*0.001, 31000*0.001, 32000*0.001, 33000*0.001,
           34000*0.001, 35000*0.001]
amplitude= [26, 31, 29, 26, 27, 24, 24, 28, 24, 24, 28, 31, 24, 26, 55, 30, 73, 101, 168, 219, 448, 833, 1280, 1397, 1181, 1311,
            1715, 1975, 2003, 2034, 2178, 2180, 2182]
plt.plot(distance,amplitude, \'o\')
popt, pcov = curve_fit(cauchy, distance, amplitude,maxfev=100, bounds=((-10, -10, -10), (3000, 3000, 3000)),p0=[2500, 1, 0])
print(popt)
plt.plot(distance, cauchy(distance, *popt), \'r\', label=\'cauchy fit\')
plt.show()
  • 你所说的“合适”是什么意思?多项式不正确吗?
  • @SolarMike 拟合曲线看起来与我的数据不相似
  • 首先修复您的功能:l / ( 1+np.exp(-k*(x-x1)) )
  • 并使用适当的启动参数。你得到的 l 相当正确,但 x1 显然应该在 30 左右,给定你的数据。
  • 问题:为什么函数叫做cauchy,当它是一个逻辑函数时?

标签: python data-analysis curve-fitting


【解决方案1】:

您的 MCVE 中有两个错误:

  • 拟合函数中缺少括号;
  • 参数边界无效

更改为:

def cauchy(x, l, k, x1):
    return l/(1 + np.exp(-k*(x-x1)))

popt, pcov = curve_fit(cauchy, distance, amplitude, maxfev=100, bounds=((100, 0.1, 0), (1e6, 2, 1e3)), p0=[2500, 1, 0])

是否符合曲线:

array([2.22741416e+03, 4.06253160e-01, 2.57502178e+01])
array([[ 6.44969848e+03, -2.38406117e+00,  2.03470488e+01],
       [-2.38406117e+00,  1.73892065e-03, -7.35023469e-03],
       [ 2.03470488e+01, -7.35023469e-03,  1.02073483e-01]])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-10-13
    • 2021-08-07
    • 2022-12-04
    • 2015-06-20
    • 1970-01-01
    • 2018-10-02
    • 2021-09-01
    • 1970-01-01
    相关资源
    最近更新 更多