【发布时间】:2015-05-24 20:07:38
【问题描述】:
我正在尝试了解已知函数对一组数据的拟合程度。我对数据的最佳拟合线或任何东西不感兴趣,我只想知道它与我的模型有多接近。我试过使用curve_fit和linregress,但都没有真正给我我想要的东西。我的数据遵循对数曲线,我一直在对数刻度上绘制它以获得大约 -4 的梯度,这接近我的模型 (-3.9),但我想知道到底有多接近。到目前为止,Linregress 是我所追求的最接近的匹配,因为它给出了相关系数,数据遵循最佳拟合线的程度,但它仍然不是我想要的。
def line(x,a,b):
return a*x+b
x = np.log(range(len(coll_ave)))
x = x[1:] # I've done this to avoid the whole ln(0)=infinity thing
y = np.log(coll_ave[1:])
popt, pcov = curve_fit(line, x, y, sigma=error[1:])
grad, inter, r_value, p_value, std_err = stats.linregress(x, y)
这些给了我很好的信息,但不是我想要的。据我所知,polyfit 不适用于线性模型,我宁愿使用我的数据日志而不是原始数据,因为我知道我所追求的梯度。如果有 numpy 或 scipy 版本,那就太好了。或者对 curve_fit 或 linregress 进行修改以使其工作。
感谢您的帮助:D
【问题讨论】:
-
如果您要求一种将数据拟合到对数曲线的方法,这是一个统计问题。如果你得到了方法,你想知道如何使用 Python 来实现它,这是这里提出的问题。我不确定你是前者还是后者。