我试图了解已知函数与一组数据的匹配程度。我对数据的最佳匹配或任何东西都不感兴趣,我只是想知道它与我的模型有多接近。我已经尝试过使用curve_fit和linregress,但它们都没有真正给我我之后的内容。我的数据遵循对数曲线,我已经在loglog刻度上绘制得到大约-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不适用于线性模型,我宁愿使用我的数据的loglog而不是原始数据,因为我知道我的梯度是什么后。如果有一个numpy或scipy版本,那就太好了。或者对curve_fit或linregress进行修改以使其工作。
感谢您的帮助:D
答案 0 :(得分:0)
所以我基本上想要numpy.corrcoef(),它采用2D数组并找到两个数据集的相关系数。
http://docs.scipy.org/doc/numpy/reference/generated/numpy.corrcoef.html
这可以衡量我的数据与模型的匹配程度。 1意味着它是一个完美的相关性,0意味着没有任何相关性,正值和负值告诉你这些值是同时增长/收缩,还是增长和收缩。