我正在尝试使用curve_fit拟合数据。然而,我收到了这个警告信息。
运行时警告:日志中遇到无效值
我搜索到这意味着log中有负值。但是,我的数据中没有负值。有人能帮忙吗?
下面是我的代码:
from scipy.optimize import curve_fit
import numpy as np
def fit(x,a,b):
return a*np.log(b*x+1)
q = [0., 4.698, 9.396, 13.148, 18.792, 22.416, 26.296, 30.176, 34.056]
r = [0., 1.50755518, 3.53050467, 6.5067685, 9.8676480, 12.8481805, 14.6121058, 15.5656062, 16.69052756]
fit_log_param, _ = curve_fit(fit, xdata=q, ydata=r)
字符串
2条答案
按热度按时间cdmah0mi1#
这意味着log中有负值
这是正确的。
之所以会发生这种情况,是因为curve_fit尝试更改各种参数,并计算卡方2或其他度量来尝试找到含义。改变这些参数可能会导致此类警告。例如,当B变为负数时,可能会发生这种情况:
b*x+1
可以变为负值,作为日志的inupt。所得到的度量通常是无穷大或NaN,并且被认为比以前的任何度量都差,因此这些参数值将很快被视为“不好”而丢弃。它们不应该妨碍试衣,但会减慢试衣速度(即使只是轻微的)。
如果使用接近预期的一些启动参数启动
curve_fit
,则通常会出现所以提供一些好的启动参数。这可能是每次使用
curve_fit
时的一个很好的实践,无论您尝试适合哪种类型的函数。azpvetkf2#
字符串
log意味着在curve_fit的搜索过程中,B*x+1可能为负,因此您可以使用param bounds限制参数的范围以避免这种情况。