使用curve_fit拟合Logistic曲线却生成直线的问题求助
curve_fit拟合Logistic曲线却生成直线的问题求助
我现在尝试用输入数据生成Sigmoid/Logistic曲线,参考了两篇帖子的代码来实现拟合和绘图,但结果不太对。
下面是我写的代码:
from scipy.optimize import curve_fit import numpy as np import matplotlib.pyplot as plt def sigmoid(x, L ,x0, k, b): y = L / (1 + np.exp(-k*(x-x0))) + b return (y) data = np.loadtxt("data.csv", delimiter=",") xdata = data[0] ydata = data[1] p0 = [max(ydata), np.median(xdata),1,min(ydata)] # 这是必须的初始猜测值 fitting_parameters, covariance = curve_fit(sigmoid, xdata, ydata,p0, method='dogbox', maxfev=10000) plt.plot(xdata, ydata, 'o', label='Data') plt.plot(xdata, sigmoid(xdata, *fitting_parameters), '-', label='Fit') plt.legend() plt.show()
运行这段代码后,得到的是一条直线,而不是预期的Logistic拟合曲线:

我哪里出错了?我知道数据有点粗糙,但这是导致问题的原因吗?
编辑补充:如果有用的话,这里是原始数据:
1.15102,1.17397,1.18334,1.18484,1.2073,1.25081,1.26446,1.26535,1.26654,1.29653,1.30118,1.30991,1.32608,1.39597,1.39721,1.41225,1.415,1.41989,1.47602,1.19992,1.23148,1.2895,1.31759,1.33068,1.34391,1.35604,1.35879,1.37359,1.38695,1.40233,1.41753,1.42323,1.43474,1.44706,1.48247,1.50033,1.52272,1.59789,1.09956,1.10712,1.13576,1.16265,1.16993,1.18129,1.19587,1.1973,1.20428,1.23916,1.24522,1.2505,1.26135,1.26542,1.27122,1.2736,1.27456,1.30306,1.34639,1.16272,1.18929,1.28076,1.28145,1.28513,1.28708,1.30215,1.30236,1.30887,1.31634,1.37677,1.37745,1.38119,1.38846,1.43016,1.43046,1.43234,1.48051,1.54508 0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95,0.05,0.1,0.15,0.2,0.25,0.3,0.35,0.4,0.45,0.5,0.55,0.6,0.65,0.7,0.75,0.8,0.85,0.9,0.95
备注:内容来源于stack exchange,提问作者Tyler Shellberg
相关产品推荐
相关产品推荐

