1차 방정식의 해를 구하는 문제는 2개의 1차 방정식의 교점을 구하는 문제의 특수한 경우라고 볼 수 있다. 즉 2개의 1차 방정식 중 1개가 x 축이 되는 경우이다. 즉 교점의 좌표를 (x0, y0)라고 한다면 x축과의 교점은 (x0, 0) 이 된다. 따라서 아주 간단한 기하학적인 아이디어를 사용하여 least square 기법을 적용해 보기로 한다.
(x,y)평면에서 1차 방정식 Ax+By+C=0 과 x축 상의 1점 P(x0, 0) 와 최단 직선거리는 그림의 d 로 표현된다.
따라서 1차 방정식의 해는 (x,y) 평면상에서 x축과 교차하는 직선의 교점을
찾는 문제가 되며, 이 최소 직선거리 d 의 제곱을 cost 함수로 선택하여 그 값을 최소화 하도록 하자.
머신 러닝을 시작하기 위한 초기 조건은 y=0 인 x축 상에 위치한 1점 P (x0, 0) 의 값을 TensorFlow 의 난수 명령을 사용하여 임의의 값 즉 W에서 시작하기로 한다. 여기에서 사용하는 W 는 선형회귀 분석에서 사용하는 weight W 와는 개념이 다르며 단순하게 W는 미지의 해 즉 x 좌표, x0를 뜻한다고 보면 된다.
d의 제곱이 위와 같이 표현되면 TensorFlow 모듈을 사용하는 linear regression 예제 코드를 쉽게 변경하여 사용할 수 있음을 알 수 있다. 이 예제에서는 특별히 바이어스 b = 0 인 경우이다.
linear regression 예제 코드에서 hypothesis 와 cost 는 다음과 같이 코딩되었음에 착안하자.
hypothesis = x_train * W + b
여기서 x_train 과 y_train 은 각각 리스트 데이터 구조를 가진다. 이 코딩을 참조하여 다음과 같이 코드 형태를 수정하자.
hypothesis = A_train * W
여기서 학습 데이터인 A_train, B_train, C_train 은 다음과 같이 리스트 데이터 구조로 주어진다.
A=1, B=1, C=-1 인 수치 예제를 고려하자. 이 문제는 다음과 같이 2개의 직선의 방정식을 의미한다. 연립하여 풀면 해는 (1, 0)이 된다.
x + y – 1 = 0,
y = 0
1/√2 = 0.707 로 두면 리스트 데이터는 다음과 같이 A_train = [ 0.707 ], B_train = [ 0.707 ], C-train = [ 0.707] 으로 설정 된다. learning rate= 0.01에 1000회 루프를 주어 계산된 결과로서 W = 1.0 즉 해는 x = 1.0 임을 알 수 있다.
이 예제에서 hypothesis 구성이 linear regression 과 다르다는 점에 유의한다. 특히 앞으로 다루게 될 수치해석 문제들에 있어서도 hypothesis 구성이 항상 linear regression 과 달라진다는 점에 유의해야 하며, 새로운 문제의 연습을 통해 적절한 형태의 hypothesis를 스스로 구성하기 위한 노력이 필요하다.
linear_reg_1wn1chaeqn_01
#linear_reg_1wn1chaeqn_01.py
import tensorflow as tf
tf.set_random_seed(777) # reproducibility
a_train = [0.707]
b_train = [0.707]
c_train = [0.707]
W = tf.Variable(tf.random_normal([1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')
hypothesis = a_train * W
cost = tf.reduce_mean(tf.square(hypothesis - c_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(501):
sess.run(train)
if step % 100 == 0:
print(step, sess.run(cost), sess.run(W))
#
'머신러닝' 카테고리의 다른 글
1-2 라즈베리 파이 TensorFlow의 그래픽 출력을 위한 MatPlotLib/Numpy/Image 설치 (0) | 2018.02.22 |
---|---|
1-10 Multi Variables Linear Regression 할아버지 시계 입찰가 연습 예제 (0) | 2018.02.21 |
5-2 중학교수학 2원1차 연립방정식에서 한 직선이 x축일 때 TensorFlow 머신 러닝 (0) | 2018.01.04 |
1-8 라즈베리 파이 TensorBoard를 활용한 cost 함수 그래픽 출력과 코드의 GRAPH 구성 분석 (0) | 2017.12.24 |
1-5 라즈베리 초보자를 위한 “머신러닝의 Linear Regression 예제에서 최소 3개 점 데이터를 사용하는 이유는? 수학 문제인듯한데 왜 방정식이 없는 (0) | 2017.12.20 |