使用matplotlib/numpy进行线性回归
问题描述:
我试图在已生成的散点图上生成线性回归,但是我的数据是以列表格式显示的,并且使用polyfit
的所有示例都需要使用arange
。 arange
虽然不接受列表。我已经搜索了如何将列表转换为数组,并且什么都看不清楚。我错过了什么吗?使用matplotlib/numpy进行线性回归
接下来,我如何最好地使用我的整数列表作为polyfit
的输入?
这里是我下面的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)
答
另一种快速和肮脏的答案是,你可以使用你的列表转换为一个数组:
import numpy as np
arr = np.asarray(listname)
答
此代码:
from scipy.stats import linregress
linregress(x,y) #x and y are arrays or lists.
给出了具有以下的列表:
标准误差斜率:浮动
斜率的回归直线的
截距:浮动
截距回归线
r值:浮
相关系数
p值:float
对于假设检验,其零假设双面p值是斜率为零
标准错误:浮动
估计