【问题标题】:LMFIT: ' ValueError: The input contains nan values'when Data Input is all FloatLMFIT:'ValueError: The input contains nan values'when Data Input is all Float
【发布时间】:2019-05-29 10:54:01
【问题描述】:

我正在尝试对我从积分中获得的数据集进行曲线拟合,lmfit 说它包含 NaN 值。

用 scipy_curvefit 拟合相同的数据,这非常糟糕。我正在尝试这个库以获得更好的结果。

我尝试将我的 yData 和 xData 更改为一些简单的数组(您将在下面看到)并得到了同样的错误!

from lmfit import Model
def poly(x, a1,a2,a3,a4,a5):
    return a1+a2*x**a3+a4*x**a5
x=s
y=vrr
x=[0.,1.,2.,3.,5.,6.]
y=[4.,5.,6.,12.,3.,5.]
gmodel = Model(poly)
gmodel_parameters= gmodel.make_params()
gmodel_parameters['a1'].set(value=10)
gmodel_parameters['a2'].set(value=10)
gmodel_parameters['a3'].set(value=7)
gmodel_parameters['a4'].set(value=10)
gmodel_parameters['a5'].set(value=7)
result=gmodel.fit(x=x,data=y,params=gmodel_parameters)

plt.plot(x, y, 'k--')
plt.plot(x, result.best_fit, 'r-')
plt.show()

【问题讨论】:

  • 我看到您正在将 svrr 值分配给 xy。你能提供一些关于这些的信息吗(我的意思是svrr)?特别是,有哪些类型,可能是print(s, vrr)
  • @pmarcol Ofc,但请注意,我将 x 和 y 重新分配给了简单的数组。 len(s),len(vrr),type(s),type(vrr) 分别给出(12000, 12000, numpy.ndarray, numpy.ndarray) 并且每个元素都是浮点数(我已经用它们做了图表,它们是集成的结果,如帖子中所述:))
  • 这在我看来是初始参数估计。在不进行任何其他更改的情况下,尝试使用这些值进行初始参数估计:a1 = 3.5E+00, a2 = -8.5E+01, a3 = 1.5E+00, a4 = 8.7E+01, a5 = 1.5E+00
  • @JamesPhillips 这确实是模型/参数问题。问题是,合身非常糟糕。它和 Curve_Fit 一样糟糕 :(-正如我在下面发布的那样-
  • 这似乎没有使用您的代码示例中的数据,请您发布您引用的数据吗?

标签: python curve-fitting lmfit


【解决方案1】:

拟合指数时要小心。如果程序将此变量设置为小于零,您可能会遇到 NaN 错误。阅读文档并尝试将 min=0 添加到 a3 和 a5 作为优化选项。

https://lmfit.github.io/lmfit-py/model.html#the-model-class

祝你好运!

【讨论】:

猜你喜欢
  • 2021-03-25
  • 1970-01-01
  • 1970-01-01
  • 2019-09-05
  • 1970-01-01
  • 1970-01-01
  • 2022-11-06
  • 2021-05-05
  • 1970-01-01
相关资源
最近更新 更多