독립변수 x, 상수항 b, 종속변수 y 사이의 관계를 모델링하는 방법으로 두 변수 사이의 관계일 경우 단순회귀라고 하며 여러 개의 변수의 관계일 경우는 다중회귀라 한다.
아래 예시는 y = W * x + b 형태의 간단한 선형회귀 분석 모델을 트레이닝하는 과정을 볼 수 있도록 구현한 것이다.
변수 x, y 가 y = 0.1 * x + 0.3 관계를 가지면서 오차가 조금씩 있도록 샘플데이터를 생성하였고 매개변수 W, b 가 좋은 값인지 측정하는 오차함수(error function) 를 평균제곱오차(mean square error)로 사용했다.
오차는 반복을 통해 점점 최소화하는데, 값을 최소화 하면서 트레이닝하는 최적화 알고리즘을 경사하강법이라 한다.
matplot 패키지가 없다면 pip install matplotlib 명령을 통해 설치하면 된다.
파이썬 3 버전 이상에서 동작하는 소스코드이며 그 이하 버전의 경우는 수정할 것이 있다.
range -> xrange ( 전자가 파이썬 3 이상버전 )
---------------------- Linear Regression source code ------------------
import numpy as np
# 임의의 좌표값 생성
# y = 0.1 * x + 0.3 관계를 가지는 데이터에 정규분포를 따르는 오차를 넣음
num_points = 1000
vectors_set = []
for i in range(num_points):
x1 = np.random.normal(0.0, 0.55)
y1 = x1 * 0.1 + 0.3 + np.random.normal(0.0, 0.03)
vectors_set.append([x1, y1])
x_data = [v[0] for v in vectors_set]
y_data = [v[1] for v in vectors_set]
# 비용함수 (오차함수)
import tensorflow as tf
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))
b = tf.Variable(tf.zeros([1]))
y = W * x_data + b
loss = tf.reduce_mean(tf.square(y - y_data))
# 최적화 알고리즘 사용 (경사하강법)
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
# 알고리즘 실행 1 - 초기화 실행
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
# 알고리즘 실행 2 - 훈련 반복 횟수
# pip install matplotlib 설치 필요
import matplotlib.pyplot as plt
for step in range(16):
sess.run(train)
print(step, sess.run(W), sess.run(b))
print(step, sess.run(loss))
# 그림으로 결과를 보고 싶을 때
plt.plot(x_data, y_data, 'ro')
plt.plot(x_data, sess.run(W) * x_data + sess.run(b))
plt.xlabel('x')
plt.xlim(-2, 2)
plt.ylim(0.1, 0.6)
plt.ylabel('y')
plt.legend()
plt.show()
---------------------- Linear Regression source code ------------------
실행 결과 예시
반복될 수록 W, b 의 값이 각각 0.1 과 0.3 에 수렴하는 것을 알 수 있다.
댓글 없음:
댓글 쓰기