[Python] tensorflow 머신러닝 - 선형 회귀

2023. 5. 8. 16:06Language/Python

선형 회귀

 - 변수 사이의 선형적인 관계를 모델링 한 것

 - 선형적인 관계에 적용하는 대표적인 기계 학습 이론이 선형 회귀임

 

선형 회귀 모델 구축

 - 주어진 데이터를 학습시켜 가장 합리적인 직선을 찾아내는 것

 - 따라서 데이터는 3개 이상일 때 의미가 있다.

 

선형 회귀란 주어진 데이터를 이용하여 일차방정식을 수정해 나가는것

 - 학습을 거쳐서 가장 합리적인 선을 찾아내는것

 - 학습을 많이 해도 완벽한 식을 찾아내지 못할 수 있다.

 - 하지만 실제 사례에서는 근사값을 찾는 것 만으로도 충분할 때가 많다.

 - 알파고도 결과적으로는 근사값을 가정하는 프로그램에 불과함

 

 

비용(Cost)

가설이 얼마나 정확한 지 판단하는 기준

 

비용함수(Cost Function)

 

경사하강(Gradient Descent)

 - 곡선의 특성상 초반에는 많은 포으로 변화한다.

 - 너무 작게 점프하면 오랫동안 학습해야 한다.

 - 너무 크게 점프하면 학습 결과가 부정확할 수 있다.

텐서플로우는 경사 하강 라이브러리를 제공합니다

 - 우리는 직접 구현할 필요 없이 원리만 이해해도 충분

 

선형 회귀 및 경사하강 프로그램 구현

 

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

xData = [1, 2, 3, 4, 5, 6, 7]
yData = [25000, 55000, 75000, 110000, 128000, 155000, 180000]

W = tf.Variable(tf.random_uniform([1], -100, 100))
b = tf.Variable(tf.random_uniform([1], -100, 100))
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
H = W * X + b
cost = tf.reduce_mean(tf.square(H - Y))

a = tf.Variable(0.01)
optimizer = tf.train.GradientDescentOptimizer(a)
train = optimizer.minimize(cost)

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

for i in range(5001):
    sess.run(train, feed_dict={X: xData, Y: yData})
    if i % 500 ==0:
        print(i, sess.run(cost, feed_dict={X: xData, Y: yData}), sess.run(W), sess.run(b))

print(sess.run(H, feed_dict={X: [8]})) - 기존 데이터를 학습시켜 8시간 동안 근무 했을때 합리적인 비용 계산

 

결과

0 4584764000.0 [10398.514] [2019.0995] 
500 8685445.0 [25539.121] [1942.2699]
1000 8633772.0 [25627.74] [1503.4292]
1500 8632674.0 [25640.652] [1439.4838]
2000 8632655.0 [25642.535] [1430.1608]
2500 8632650.0 [25642.807] [1428.8167]
3000 8632651.0 [25642.844] [1428.6324]
3500 8632656.0 [25642.848] [1428.6133]
4000 8632656.0 [25642.848] [1428.6133]
4500 8632656.0 [25642.848] [1428.6133]
5000 8632656.0 [25642.848] [1428.6133] 
[206571.39]

 

출처 : https://www.youtube.com/watch?v=IhNNpyWKorY&list=PLRx0vPvlEmdAbnmLH9yh03cw9UQU_o7PO&index=2

반응형