선형 회귀 모델링은 키와 체중과의 관계식에서 처럼 신체 검사 분야에서 흔히 사용 사례를 찾을 수 있다. 충분히 많은 샘플 데이터를 2차원 평면에 찍은 후 키와 체중과의 일차함수적인 관계를 통계학적으로 least square fitting 법을 적용하여 찾아내는 것이다.
이러한 작업의 가장 간단한 코딩 예로서 xy 평면 상의 3개의 점 데이터를 고려해 보기로 한다.
x 구간에 정의된 3개의 입력 데이터에 대응하여 각각 y 값들이 대응하는 일차 함수 모델을 고려하자. 이 모델 y = Wx + b 를 결정하기 위해서 입력되는 점들과 이 직선과의 거리 제곱의 합의 평균값을 최소화 하도록 한다.
노드 x_train 과 y_train 에 의해 3개의 점을 입력한다. 노드 W는 텐서 랭크가 1인 1차원 어레이로 변수 즉 Variable로 규정한다. 아직 W는 마지막 단계에서 결정이 되기 전에 처음에는 그 값을 알 수 없으므로 처음에 난수 즉 random_normal 로 둔 상태에서 TensorFlow 파이선 코드 실행에 따른 학습을 통해 그 구체적인 값을 결정하게 된다. 마찬가지로 바이어스 b 도 random_normal 로 둔다. 최종적으로 결정하고자 하는 노드 hypothesis는 x_train*W+b 로 두기로 하자.
hypothesis 란 용어는 통계학에서 사용하는 가설에 해당한다. 즉 weight 값과 바이어스 b 값이 최종적으로 결정되기 전까지 반복 학습 단계를 거치게 되며 선형회귀 학습 완료 후 이 hypothesis는 임의의 입력 값에 대한 예상 값을 계산 가능하게 한다. 앞으로 다루게 될 머신 러닝 문제가 통계학 문제가 아니더라도 챈ㅅ 함수를 구성하기 위한 이 함수를 hypothesis 로 두기로 하자.
hypothesis 값과 y_train 과의 차이 값의 제곱을 합하여 평균한 값을 노드 cost로 둔다. 머신러닝이나 최적 설계에서 이 cost 함수는 항상 최소화(minimization)의 대상이 된다.
이 cost 함수는 W 또는 b 에 관한 2차식으로 표현이 된다. W 와 b 값을 결정할 수 있도록 학습을 진행함에 있어 경사 하강법을 적용하며, 경사 값 계산 증분율을 0.01로 설정하여 cost를 최소화하는 W 와 b 값을 추적한다.
이와 같이 데이터 설정과 연산이 설정 완료되면 Session을 실행한다. 즉 step = 0 에서 2000까지 loop를 돌 되 아래와 같이 100 회에 1회 꼴로 결과를 출력해 보기로 한다. cost 의 최종 값이 10의 –6승이므로 거의 0 에 가깝다. W는 거의 1.0으로 보면 될 정도이며 b도 반올림하여 0.01 정도이나 거의 0에 가깝다.
사용자 별로 동일한 코드를 실행해도 난수 값이 달라질 수 있어 초기치들이 변동되겠지만 정성적으로 비슷한 결과를 얻을 수 있을 것이다.
linear_regression.py
import tensorflow as tf
x_train = [1, 2, 3]
y_train = [1, 2, 3]
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
hypothesis = x_train * W + b
cost = tf.reduce_mean(tf.square(hypothesis - y_train))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01)
train = optimizer.minimize(cost)
sess = tf.Session()
sess.run(tf.global_variables_initializer())
for step in range(2001):
sess.run(train)
if step % 100 == 0:
print(step, sess.run(cost), sess.run(W), sess.run(b))
'머신러닝' 카테고리의 다른 글
1-5 라즈베리 초보자를 위한 “머신러닝의 Linear Regression 예제에서 최소 3개 점 데이터를 사용하는 이유는? 수학 문제인듯한데 왜 방정식이 없는 (0) | 2017.12.20 |
---|---|
1-9 TensorFlow 모듈응용 cost(W,b) 함수 (0) | 2017.12.05 |
1-3 TensorFlow 모듈응용 Computational Graph 덧셈 placeholder 예제 (0) | 2017.12.05 |
1-2 라즈베리 파이 TensorFlow 모듈응용 Computational Graph 상수 덧셈 예제 (0) | 2017.12.05 |
1-1 라즈베리 파이 구글 인공지능 머신러닝 지원 TensorFlow 모듈 설치 및 시험 (0) | 2017.12.05 |