matplotlib / numpyによる線形回帰


89

生成した散布図で線形回帰を生成しようとしていますが、データはリスト形式であり、使用polyfitする例はすべて、を使用する必要がありarangeます。arangeただし、リストは受け付けません。リストを配列に変換する方法について高低を検索しましたが、何も明確ではないようです。私は何かが足りないのですか?

続いて、整数のリストを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() 

回答:


187

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

coef = np.polyfit(x,y,1)
poly1d_fn = np.poly1d(coef) 
# poly1d_fn is now a function which takes in x and returns an estimate for y

plt.plot(x,y, 'yo', x, poly1d_fn(x), '--k')
plt.xlim(0, 5)
plt.ylim(0, 12)

ここに画像の説明を入力してください


38

このコード:

from scipy.stats import linregress

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

次のリストを提供します。

勾配:フロート
回帰直線の傾き
フロート:インターセプト
回帰直線の切片
r値:フロート
相関係数
p値:フロート
帰無仮説傾きがゼロであることであるという仮説を試験するための両側p値は
標準エラー:フロート
推定値の標準誤差

ソース


4
import numpy as np
import matplotlib.pyplot as plt 
from scipy import stats

x = np.array([1.5,2,2.5,3,3.5,4,4.5,5,5.5,6])
y = np.array([10.35,12.3,13,14.0,16,17,18.2,20,20.7,22.5])
gradient, intercept, r_value, p_value, std_err = stats.linregress(x,y)
mn=np.min(x)
mx=np.max(x)
x1=np.linspace(mn,mx,500)
y1=gradient*x1+intercept
plt.plot(x,y,'ob')
plt.plot(x1,y1,'-r')
plt.show()

これを使って ..


これは問題に取り組むための新しい方法を追加しません-それはこの人気のある答えですでに提案さています
ミスターT

生成されたリストを配列に変換しますか?
AleenaRehman18年

具体的なことは何もしたくありません。これは私の質問ではありません。すでに確立された答えを繰り返すことは実際にはそうではなく、SOが探していることだと言っているだけです。リンクを読んでください、私は投稿しました。
ミスターT

2
from pylab import * 

import numpy as np
x1 = arange(data) #for example this is a list
y1 = arange(data) #for example this is a list 
x=np.array(x) #this will convert a list in to an array
y=np.array(y)
m,b = polyfit(x, y, 1) 

plot(x, y, 'yo', x, m*x+b, '--k') 
show()

1
なるほど、コメントをいくつか書いていますが、説明文をいくつか追加することを検討する必要があります。これにより、回答の価値が高まります;-)
MBT

1
コードスニペットそれ自体で有用な答えになる可能性がありますが、これが問題を解決する理由について、将来の読者のためにコメントを残すことが望ましいことに注意してください。ありがとう!
Erty Seidohl 2018年

1
@ blue-phoenoxよく私は人々がここで天才だと思ったが、私は次回説明すると思う..
AleenaRehman18年

1

もう1つの手っ取り早い答えは、次を使用してリストを配列に変換できるということです。

import numpy as np
arr = np.asarray(listname)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.