2011-05-27 49 views
60

我試圖在已生成的散點圖上生成線性迴歸,但是我的數據是以列表格式顯示的,並且使用polyfit的所有示例都需要使用arangearange雖然不接受列表。我已經搜索瞭如何將列表轉換爲數組,並且什麼都看不清楚。我錯過了什麼嗎?使用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() 

回答

120
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) 
1

另一種快速和骯髒的答案是,你可以使用你的列表轉換爲一個數組:

import numpy as np 
arr = np.asarray(listname) 
22

此代碼:

from scipy.stats import linregress 

linregress(x,y) #x and y are arrays or lists. 

給出了具有以下的列表:

斜率:浮動
斜率的迴歸直線的
截距:浮動
截距迴歸線
r值:浮
相關係數
p值:float
對於假設檢驗,其零假設雙面p值是斜率爲零
標準錯誤:浮動
估計

Source

標準誤差