用matplotlib / numpy进行线性回归
我试图在已经生成的散点图上生成一个线性回归,但是我的数据是列表格式的,所有使用polyfit
的例子都需要使用arange
。 arange
不接受名单。 我已经search高低如何将列表转换为数组,并没有看起来清晰。 我错过了什么吗?
接下来,如何最好地使用我的整数列表作为polyfit
input?
这里是我所遵循的polyfit例子:
from pylab import * x = arange(data) y = arange(data) m,b = polyfit(x, y, 1) plot(x, y, 'yo', x, m*x+b, '--k') show()
arange
生成列表(以及numpy数组); 键入help(np.arange)
的细节。 您不需要在现有列表上调用它。
>>> x = [1,2,3,4] >>> y = [3,5,7,9] >>> >>> m,b = np.polyfit(x, y, 1) >>> m 2.0000000000000009 >>> b 0.99999999999999833
我应该补充一点,我倾向于在这里使用poly1d
,而不是写出“m * x + b”和更高阶的等价物,所以我的版本代码如下所示:
import numpy as np import matplotlib.pyplot as plt x = [1,2,3,4] y = [3,5,7,10] # 10, not 9, so the fit isn't perfect fit = np.polyfit(x,y,1) fit_fn = np.poly1d(fit) # fit_fn is now a function which takes in x and returns an estimate for y plt.plot(x,y, 'yo', x, fit_fn(x), '--k') plt.xlim(0, 5) plt.ylim(0, 12)
此代码:
from scipy.stats import linregress linregress(x,y) #x and y are arrays or lists.
给出了一个列表如下:
斜率:浮动
回归线的斜率
拦截:浮动
拦截回归线
r-value:float
相关系数
p值:浮动
假设检验的双侧p值,零假设是斜率为零
stderr:float
估算的标准误差
资源
另一个快速和肮脏的答案是,你可以将您的列表转换为一个数组使用:
import numpy as np arr = np.asarray(listname)