NAN/머신 러닝
데이터 실습
onddd
2021. 7. 8. 22:46
728x90
실습
텐서 플로우를 활용하여 아래 데이터를 모델로 하루 노동 시간이 8시간일 때 일 매출량을 예측해보자
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는 Weight(가중치), b는 bias y절편
#random_unifrom은 랜덤한 값으로 -x ~~ x까지의 수가 들어가는 함수
W = tf.Variable(tf.random_uniform([1], -100, 100))
b = tf.Variable(tf.random_uniform([1], -100, 100))
# 가장 대표적인 형태인 placeholder == 하나의 틀
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
# 하나의 가설식 H
H = W*X + b
#비용함수 코스트는 (이상치-실제값)의 제곱의 평균
# reduce_mean : 평균값 구하기 square : 제곱
cost = tf.reduce_mean(tf.square(H-Y))
#경사 하강 알고리즘 정의, 한번에 얼만큼 점프할건지. step의 크기.
a = tf.Variable(0.01)
optimizer = tf.train.GradientDescentOptimizer(a)
# 정의한 비용 함수 optimizer를 가장 적은 값이 나올 수 있도록 만들어준다.
train = optimizer.minimize(cost)
#변수 초기화
init = tf.global_variables_initializer()
# 세션 정하기 우리가 만든 텐서플로우 객체에서 세션을 가져와 정해준다.
sess = tf.Session()
# 초기화
sess.run(init)
# 실제 학습 진행
# 반복 횟수는 총 5000
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))
# x가 8일 경우 결과 값을 예측하여 나오도록 만듬
print (sess.run(H, feed_dict={X : [8]}))
# 결과
0 4587030000.0 [10375.747]
500 8688367.0 [25536.295]
1000 8633836.0 [25627.328]
1500 8632677.0 [25640.592]
2000 8632651.0 [25642.527]
2500 8632653.0 [25642.805]
3000 8632656.0 [25642.844]
3500 8632657.0 [25642.848]
4000 8632657.0 [25642.848]
4500 8632657.0 [25642.848]
5000 8632657.0 [25642.848]
[206571.39]
복잡한 과정을 5000천 반복해 얻은 값은 8632657.0 [25642.848]이고 이를 식에 대입해 8일로 계산을 하게 되면
일 매출은 [206571.39] 을 받을 수 있다는 걸 확인할 수 있었다.
사람이 실제로 계산한다면 상당히 번거러운 일이었겠지만, 기계 학습을 통해 비교적 간단하게 값을 반환받고
이를 일상에 대입하여 사용할 수 있는 것이다.
https://www.youtube.com/watch?v=bttjuId61dw&list=PLRx0vPvlEmdAbnmLH9yh03cw9UQU_o7PO&index=4