2017-04-01 3 views
3

을 주어진 그래프로 회귀 줄을 추가 :파이썬 /하기 matplotlib : 다음 작은 데이터 집합을 사용하여 절편과 기울기

bill = [34,108,64,88,99,51] 
tip = [5,17,11,8,14,5] 

나는 (손으로)을 최적 회귀선을 계산 하였다.

yi = 0.1462*x - 0.8188 #yi = slope(x) + intercept 

I는 다음과 같이하기 matplotlib를 사용하여 내 원래의 데이터를 그려했습니다

scatter(bill,tip, color="black") 
plt.xlim(20,120) #set ranges 
plt.ylim(4,18) 

#plot centroid point (mean of each variable (74,10)) 
line1 = plt.plot([74, 74],[0,10], ':', c="red") 
line2 = plt.plot([0,74],[10,10],':', c="red") 

plt.scatter(74,10, c="red") 

#annotate the centroid point 
plt.annotate('centroid (74,10)', xy=(74.1,10), xytext=(81,9), 
     arrowprops=dict(facecolor="black", shrink=0.01), 
     ) 

#label axes 
xlabel("Bill amount ($)") 
ylabel("Tip amount ($)") 

#display plot 
plt.show() 

나는 플롯 자체 위에 회귀 라인을 얻을하는 방법을 확실입니다. 저는 가장 잘 맞는 라인을 빠르게 맞추고 표시하기위한 내장 된 것들이 많이 있다는 것을 알고 있습니다,하지만 이것을 연습으로했습니다. 나는 '0,0.8188'(가로 채기) 점에서 선을 시작할 수 있음을 알고 있지만 선을 완료하는 데 경사 값을 사용하는 방법을 모릅니다 (선의 끝점 설정).

x 축에서 증가 할 때마다 기울기는 '0.1462'만큼 증가해야합니다. (0,0.8188), 종점에 대해 (100, 14.62)를 시도했습니다. 그러나이 선은 내 중점을 통과하지 못합니다. 그냥 놓친다.

건배, 존

+1

질문을 명확히하십시오. 그래프에 선을 그리는 방법에 대해 묻고 있습니까, 아니면 라이브러리를 사용하지 않고 선형 회귀를 계산하는 방법을 묻고 있습니까? 후자 인 경우이 질문은 주제와 관련이 없으므로 선형 회귀를 설명하는 숫자 조리법 텍스트를 찾아야합니다. – Craig

+0

그래프에 선을 그리는 방법을 묻습니다. 이미 기울기와 절편을 계산했습니다. 나는 그것을 구체적으로 보여주고 싶다. – Jon

답변

1

) (플롯 튜플 넣어 데이터의 엔드 포인트를 얻을 부분적 정확한 질문에 추론 기능 착용감을 정의한다. 기능이 f(x) = a*x +b 인 경우 y 축 (x = 0)을 가로 채고 가로 채기를 (0, b) (또는이 경우 (0,-0.8188))으로 취할 수 있습니다.
해당 행의 다른 점은 (x, f(x)) 또는 (x, a*x+b)입니다. 따라서 x = 100의 지점을 보면 (100, f(100))이 표시됩니다. 연결하는 위치는 (100, 0.1462*100-0.8188) = (100,13.8012)입니다. 질문에 설명하는 경우에 b을 고려하는 것을 잊어 버렸습니다.

하기 matplotlib에 선을 그릴 해당 기능을 사용하는 방법을 보여줍니다

:

import matplotlib.pyplot as plt 
import numpy as np 

bill = [34,108,64,88,99,51] 
tip = [5,17,11,8,14,5] 
plt.scatter(bill, tip) 

#fit function 
f = lambda x: 0.1462*x - 0.8188 
# x values of line to plot 
x = np.array([0,100]) 
# plot fit 
plt.plot(x,f(x),lw=2.5, c="k",label="fit line between 0 and 100") 

#better take min and max of x values 
x = np.array([min(bill),max(bill)]) 
plt.plot(x,f(x), c="orange", label="fit line between min and max") 

plt.legend() 
plt.show() 

enter image description here

피팅이 자동으로 수행 할 수 있습니다 물론. 당신은 numpy.polyfit에 대한 호출에서 기울기와 절편을 얻을 수 있습니다 음모에

#fit function 
a, b = np.polyfit(np.array(bill), np.array(tip), deg=1) 
f = lambda x: a*x - b 

나머지는 동일하게 유지됩니다.

+0

매우 도움이됩니다. 감사합니다. – Jon

1

def fit(x): 
    return 0.1462*x - 0.8188 #yi = slope(x) - intercept 
xfit, yfit = (min(bill), max(bill)), (fit(min(bill)), fit(max(bill)))  
plt.plot(xfit, yfit,'b') 
0

빠른 참고 : 나는 회귀에 대한 공식은 내가 + 대신 의미

return 0.1462*x + 0.8188 #yi = slope(x) + intercept 

해야한다고 생각 -.

+0

이것은 대답처럼 읽지 않습니다 - 훨씬 더 코멘트처럼! – GhostCat

+0

사실, 예제에서 주어진 데이터에 대한 절편은 음수이므로 올바른 수식은 실제로 y = slope (x) + intercept'이지만 다른 게시물에서는 수치가있는 응용 프로그램이 정확합니다 – bli