2017년 3월 14일 화요일

텐서플로우 01 선형회귀 예시 (TensorFlow Linear Regression)

 선형회귀분석은 변수들 사이의 관계를 분석하는데 사용하는 통계학적 방법이다.
독립변수 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 에 수렴하는 것을 알 수 있다.

















댓글 없음:

댓글 쓰기