繁体   English   中英

来自scipy.optimze的curve_fit问题

[英]Problems with curve_fit from scipy.optimze

我知道有一些类似的问题,但由于他们都没有带我进一步,我决定问一个我自己的问题。 对不起,如果我的问题的答案已经在某处,但我真的找不到它。

我尝试使用curve_fit将f(x)= a * x ** b拟合为相当线性的数据。 它编译正确,但结果如下所示:

在此输入图像描述

问题是,我真的不知道我在做什么,但另一方面,拟合总是更像是一门艺术,而不是科学,至少有一个与scipy.optimize的一般错误

我的数据如下:

x值:

[16.8, 2.97, 0.157, 0.0394, 14.000000000000002, 8.03, 0.378, 0.192, 0.0428, 0.029799999999999997, 0.000781, 0.0007890000000000001]

y值:

[14561.766666666666, 7154.7950000000001, 661.53750000000002, 104.51446666666668, 40307.949999999997, 15993.933333333332, 1798.1166666666666, 1015.0476666666667, 194.93800000000002, 136.82833333333332, 9.9531566666666684, 12.073133333333333]

这是我的代码(在该问题的最后一个答案中使用了一个非常好的例子):

def func(x,p0,p1): # HERE WE DEFINE A FUNCTION THAT WE THINK WILL FOLLOW THE DATA DISTRIBUTION
    return p0*(x**p1)

# Here you give the initial parameters for p0 which Python then iterates over to find the best fit
popt, pcov = curve_fit(func,xvalues,yvalues, p0=(1.0,1.0))#p0=(3107,0.944)) #THESE PARAMETERS ARE USER DEFINED

print(popt) # This contains your two best fit parameters

# Performing sum of squares
p0 = popt[0]
p1 = popt[1]
residuals = yvalues - func(xvalues,p0,p1)
fres = sum(residuals**2)

print 'chi-square'
print(fres) #THIS IS YOUR CHI-SQUARE VALUE!

xaxis = np.linspace(5e-4,20) # we can plot with xdata, but fit will not look good 
curve_y = func(xaxis,p0,p1)

起始值来自与gnuplot的拟合,这似乎是合理的,但我需要交叉检查。

这是打印输出(首先适合p0,p1,然后是卡方):

[  4.67885857e+03   6.24149549e-01]
chi-square
424707043.407

我想这是一个很难的问题,所以非常感谢!

当拟合curve_fit优化(数据 - 模型)^ 2 /(误差)^ 2的总和时

如果您没有传递错误(正如您在此处所做的那样), curve_fit假定所有点的错误均为1。

在这种情况下,当您的数据跨越多个数量级时,具有最大y值的点主导目标函数,并导致curve_fit尝试以牺牲其他值为代价来拟合它们。

修复此问题的最佳方法是在拟合中包含yvalues的误差(看起来就像你在你绘制的图中有误差条一样!)。 您可以通过将它们作为curve_fitsigma参数传递来完成此curve_fit

我会重新考虑实验部分。 两个数据点是有问题的: 在此输入图像描述

你给我们看的图像看起来很不错,因为你拍了日志:

在此输入图像描述

您可以对log(x)和log(y)进行线性拟合。 通过这种方式,您可以限制最大残差的影响。 另一种方法是稳健回归(来自sklearn的RANSAC或来自scipy的leastSquares)。

不过,您应该收集更多数据点或重复测量。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM