【问题标题】:how to find 50% point after curve fitting using numpy如何在使用 numpy 进行曲线拟合后找到 50% 点
【发布时间】:2014-04-12 05:55:16
【问题描述】:

我在 python 中使用 numpy 将我的数据拟合到 S 形曲线。数据拟合曲线后,如何在曲线中 y=50% 点找到 X 的值

enter code here`import numpy as np
enter code here`import pylab
from scipy.optimize import curve_fit

def sigmoid(x, x0, k):
   y = 1 / (1 + np.exp(-k*(x-x0)))
   return y

xdata = np.array([0.0,   1.0,  3.0, 4.3, 7.0,   8.0,   8.5, 10.0, 12.0])
ydata = np.array([0.01, 0.02, 0.04, 0.11, 0.43,  0.7, 0.89, 0.95, 0.99])

popt, pcov = curve_fit(sigmoid, xdata, ydata)
print popt

x = np.linspace(-1, 15, 50)
y = sigmoid(x, *popt)

pylab.plot(xdata, ydata, 'o', label='data')
pylab.plot(x,y, label='fit')
pylab.ylim(0, 1.05)
pylab.legend(loc='best')
pylab.show()

【问题讨论】:

  • 请通过提供示例代码展示您尝试过的内容以及您期望的行为。
  • 对于完整的 S 形曲线,它将是 0, f(x=0)...
  • 这找到了一条曲线 我如何在数据拟合后找到 50% x 值 import numpy as np import pylab from scipy.optimize import curve_fit def sigmoid(x, x0, k): y = 1 / (1 + np.exp(-k*(x-x0))) 返回 y xdata = np.array([0.0, 1.0, 3.0, 4.3, 7.0, 8.0, 8.5, 10.0, 12.0]) ydata = np.array ([0.01, 0.02, 0.04, 0.11, 0.43, 0.7, 0.89, 0.95, 0.99]) popt, pcov = curve_fit(sigmoid, xdata, ydata) print popt x = np.linspace(-1, 15, 50) y = sigmoid(x, *popt) pylab.plot(xdata, ydata, 'o', label='data') pylab.plot(x,y, label='fit') pylab.ylim(0, 1.05) pylab.legend (loc='best') pylab.show()
  • @user3395925 您可以发表您的评论作为答案...
  • 对不起,我没明白你的意思?

标签: python numpy curve-fitting


【解决方案1】:

你只需要解决你为y(x) = 0.50找到的函数。您可以使用root finding tools of scipy 之一,尽管它们只能解决零,因此您需要为您的函数提供一个偏移量:

def sigmoid(x, x0, k, y0=0):
   y = 1 / (1 + np.exp(-k*(x-x0))) + y0
   return y

那么只需要调用选择的寻根方法即可:

from scipy.optimize import brentq

a = np.min(xdata)
b = np.max(xdata)
x0, k = popt
y0 = -0.50

solution = brentq(sigmoid, a, b, args=(x0, k, y0))  # = 7.142

除了你的评论:

我上面的代码使用的是用您的代码计算的原始popt。如果您使用更新的sigmoid 函数(带有偏移)进行曲线拟合,popt 还将包含y0 的拟合参数。

可能你不想要这个.. 你会想要适合y0=0 的曲线。这可以通过只用两个值对curve_fit 进行猜测来完成。这样将使用 sigmoid 函数的 y0 的默认值:

popt, pcov = curve_fit(sigmoid, xdata, ydata, p0 = (1,1))

或者,只需声明两个单独的 sigmmoid 函数,一个带偏移量,一个不带偏移量。

【讨论】:

  • @user3395925 我运行了你的脚本,我觉得合适。不完美但仍然合理..我想您提供的数据无法更好地拟合。
  • 我认为你的回答有问题,因为它说的参数太多,需要为 popt 解包
猜你喜欢
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-11-14
  • 1970-01-01
  • 2015-07-04
  • 1970-01-01
相关资源
最近更新 更多