Lec 02 - Linear Regression의 가설(Hypothesis)과 비용(cost) 설명

https://www.youtube.com/watch?v=Hax03rCn3UI

  • 시험성적 예측 (supervised learning) 선형 회귀분석
    • x(hours), y(score) ->[[10,90], [9,80], [3,50], [2,30]] 의 경우.
    • regression 모델로 training 시킴
    • (x,y) ->[[1,1], [2,2], [3,3]] 의 경우
    • 가설(Hypothesis) : linear regression.
      • 최적의 선을 찾는 것이 학습과정
  • 선형 회귀분석의 가설 : H(x) = Wx + b 에서, 가장 좋은 W와 b 를 찾아야 함.
    • 어떤 가설이 좋은지를 찾는다는 것은, 실제 데이터와, 가설 H(x)에 의한 점과의 거리가 가까울 수록 좋은 모델임. 
  • 이렇게 거리를 측정하는 것을 Cost Function, Loss Function 이라고 함. 대부분 두 값의 차이의 제곱을 구하게 됨

  •  Cost function 의 정의

    • 이 cost 함수는 W와 b 의 함수가 되는데, cost를 최소로 줄여주는 W, b를 찾는 것이 학습임.

Lab 02 TensorFlow로 간단한 linear regression을 구현하는 방법

  • TF 연산을 사용하여 그래프를 Build
    • Hypothesis

x_train = [1,2,3]
y_train = [1,2,3]

# tf의 Variable이란, TF가 t사용하는, 자체적으로 변경시키는, trainable 변수.
# [1]는 shape.
W = tf.Variable(tf.random_normal([1]), name = 'weight')
b = tf.Variable(tf.random_normal([1]), name = 'bias')

# 우리는 Linear Regression을 가정했으므로, W *x + b 가 hypothesis
hypothesis = x_train * W + b

    • Cost function

# reduce_mean 은 평균을 구하라는 연산
cost = tf.reduce_mean(tf.square(hypothesis - y_train)) 

    • GradientDescent : Minimize. 현재는 그냥 이렇게 쓴다고만 생각할 것.

# Minimize
optimizer = tf.train.GradientDescentOptimizer (learning_rate = 0.01)
train = optimizer.minimize(cost)

  • 그래프를 실행/갱신 한뒤, 결과를 출력

#  세션에서 그래프를 실행시킨다.
sess = tf.Session()
#그래프에서 글로벌 변수(W, b)를 초기화한다.
sess.run(tf.global_variables_initializer())

# train을 실행시키면 여기에 연결된 optimizer-cost-hypothesis-W/b 가 모두 실행된다.
for step in range(2001) :
    sess.run(train)
    if step % 20 ==0 :
        print(step, sess.run(cost), sess.run(W), sess.run(b))

  • 결과

0 1.65899 [ 0.83828998] [-0.95781285]
20 0.0862329 [ 1.26493335] [-0.72846115]
40 0.0654389 [ 1.29238355] [-0.67667371]

1960 6.32628e-06 [ 1.00292134] [-0.00664066]
1980 5.7456e-06 [ 1.00278401] [-0.0063286]
2000 5.21818e-06 [ 1.00265312] [-0.00603121]

=========

  • Placehoder를 사용할 경우

import tensorflow as tf

W = tf.Variable(tf.random_normal([1]), name = 'weight')
b = tf.Variable(tf.random_normal([1]), name = 'bias')
X = tf.placeholder(tf.float32, shape=[None])   # None 이면 실수. 갯수는 자유
Y = tf.placeholder(tf.float32, shape=[None])

hypothesis = X * W + b

cost = tf.reduce_mean(tf.square(hypothesis - Y))

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) :
    cost_val, W_val, b_val, _ = sess.run([cost, W, b, train], feed_dict={X:[1,2,3,4,5], Y:[2.1, 3.1, 4.1, 5.1, 6.1]})
    if step % 20 ==0 :
        print(step, cost_val, W_val, b_val)

#여기까지는 optimize 시킨 W,b를 찾는 과정임.
#이를 사용하여 predict를 해보면...
print(sess.run(hypothesis, feed_dict={X: [5]}))
print(sess.run(hypothesis, feed_dict={X: [1.5, 5.5]}))

#이러한 답이 나온다.
[ 6.10004997]
[ 2.59992599  6.60006762]


댓글을 달아 주세요

BLOG main image
공간정보와 인터넷지도
제 관심사는 계속 바뀝니다. 이 블로그를 유지하는 동안에도 벌써 여러번 주제가 빠뀐 것 같습니다. 돌고 돌아 이제 고향으로 돌아왔습니다. 공간정보입니다. 세계를 측정하고, 그 기준을 세우고, 데이터를 효율적으로 공유하는 것이 공간정보에서 다루는 내용입니다. 4차산업혁명이 데이터 기반이라고들 합니다. 데이터는 그냥 모아둔다고 정보가 되지 않습니다. 표준에 따른 공통 스키마를 기반으로 만들어져야 합니다. 누구나 언제든지, 쉽고 투명하게 데이터를 가져다 쓸
by 푸른하늘이
Profile for bluesky61

달력

«   2019/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31        

카테고리

전체보기 (1590)
구글어스 (829)
공간정보 (240)
사진 (103)
드론/쿼드콥터 (239)
지오캐싱 (47)
기타 (131)
  • 4,682,194
  • 50381
TNM Media textcube get rss

공간정보와 인터넷지도

푸른하늘이's Blog is powered by Tistory. / Supported by TNM Media.
Copyright by 푸른하늘이 [ http://www.ringblog.com ]. All rights reserved.

Textcube TNM Media
푸른하늘이's Blog is powered by Tistory. Designed by Qwer999. Supported by TNM Media.