반응형
SMALL
선형 회귀는 종속 변수 y와 한 개 이상의 독립 변수 X와의 선형 상관 관계를 모델링하는 회귀분석 기법을 말합니다.
이번 시간에는 y와 x가 주어졌을 때, 'y = ax + b'라는 형태의 직선을 회귀식으로 하는 단순한 선형 회귀(Linear Regression)를 파이썬을 통해 구현해봅시다.
선형 회귀의 절차
- x라는 값이 입력되면 'ax+b'라는 계산식을 통해 값을 산출하는 예측 함수를 정의합니다.
- 예측 함수를 통해 예측값과 실제값 y간의 차이를 계산합니다.
- a와 b를 업데이트 하는 규칙을 정의하고 이를 바탕으로 a와 b의 값을 조정합니다.
- 위의 과정을 특정 반복횟수만큼 반복합니다.
- 반복적으로 수정된 a와 b를 바탕으로 'y=ax+b'라는 회귀식을 정의합니다.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.use("Agg")
# 학습률(learning rate)를 설정한다.(권장: 0.0001~0.01)
learning_rate = 0.005
# 반복 횟수(iteration)를 설정한다.(자연수)
iteration = 100
def prediction(a, b, x):
# 넘파이 배열 a,b,x를 받아서 'x*(transposed)a + b'를 계산하는 식을 만든다.
equation = x * a.T + b
return equation
def update_ab(a,b,x,error,lr):
# a를 업데이트하는 규칙을 정의한다.
delta_a = -(lr*(2/len(error))*(np.dot(x.T, error)))
# b를 업데이트하는 규칙을 정의한다.
delta_b = -(lr*(2/len(error))*np.sum(error))
return delta_a, delta_b
def gradient_descent(x, y, iters):
#초기값 a= 0, a=0
a = np.zeros((1,1))
b = np.zeros((1,1))
for i in range(iters):
#실제 값 y와 예측 값의 차이를 계산하여 error를 정의한다.
error = y - prediction(a, b, x)
a_delta, b_delta = update_ab(a,b,x,error,lr=learning_rate)
a -= a_delta
b -= b_delta
return a, b
def plotting_graph(x,y,a,b):
y_pred=a[0,0]*x+b
plt.scatter(x, y)
plt.plot(x, y_pred)
plt.savefig("test.png")
eu.send_image("test.png")
def main():
x = 5*np.random.rand(100,1)
y = 3*x + 5*np.random.rand(100,1)
a, b = gradient_descent(x,y,iters=iteration)
print("a:",a, "b:",b)
plotting_graph(x,y,a,b)
main()
반응형
LIST
'Machine, Deep Learning > Machine, Deep Learning 실습' 카테고리의 다른 글
릿지 회귀(Ridge Regression) 구현하기 (0) | 2019.06.24 |
---|---|
Scikit-learn을 이용한 linear regression (0) | 2019.06.24 |
Loss Function (0) | 2019.06.24 |
기울기와 절편 (0) | 2019.06.24 |
Pandas 데이터 추출 및 추가 (0) | 2019.06.24 |