matplotlib / numpy를 사용한 선형 회귀


87

내가 생성 한 산점도에서 선형 회귀를 생성하려고하지만 내 데이터는 목록 형식이며 사용할 수있는 모든 예제 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() 

답변:


183

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- 값 :
귀무 가설이 기울기가 0이라는 가설 검정을위한 부동 양측 p- 값
stderr : float
추정치의 표준 오차

출처


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()

이 .. 사용


이것은 문제를 해결하는 새로운 방법을 추가하지 않습니다. 이미이 인기있는 답변에서 제안되었습니다 .
Mr. T

생성 된 목록을 배열로 변환 하시겠습니까?
Aleena Rehman

나는 특정한 것을 원하지 않는다. 이것은 내 질문이 아니다. 나는 이미 확립 된 대답을 반복하는 것이 실제로 SO가 찾고있는 것이 아니라고 말하는 것입니다. 링크를 읽어주세요.
Mr. 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

1
@ blue-phoenox 음 나는 사람들이 여기에 천재라고 생각했지만 다음에 설명 할 것 같다 ..
Aleena Rehman

1

또 다른 빠르고 더러운 대답은 다음을 사용하여 목록을 배열로 변환 할 수 있다는 것입니다.

import numpy as np
arr = np.asarray(listname)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.