[Tensorflow]3.Linear Regression(2)


Linear Regression(2)


2.Linear Regression(1) 에 이어서 포스팅을 하겠습니다.
이번에는 tensorflow로 처음부터 끝까지 간단하게 데이터를 훈련시키고 예측까지 시켜보겠습니다.

전 장에서 언급한 예제인 어떤 학생의 수학 점수를 입력하면 대학 합격 유무를 알려주게끔 학습을 시켜 보겠습니다.

5명의 데이터를 가지고 학습을 시키겠습니다. 실제로는 엄청 많은 학습데이터가 필요하죠~~
여기서는 머신러닝(기계학습)이 tensorflow에서 어떤 식으로 동작하는지 이해하는 것에 초점을 두시기 바랍니다.

그럼 시작하겠습니다~ (코드 작성은 jupyter notebook을 사용하는 것이 편합니다.)

먼저, 맨 처음 tensorflow를 import~~!

import tensorflow as tf



그리고 우리가 사용할 데이터 실제 올해 합격한 대학생의 데이터입니다.

x_data=[100,58,95,72,83]
#학생1 100점,학생2 58점,학생3 95점, 학생4 72점,학생5 83점
y_data=[1,0,1,0,1] #합격 불합격 합격 불합격 합격



그 다음 학습에 필요한 변수들 선언!

#데이터를 담을 틀이라 생각
X=tf.placeholder(tf.float32,shape=[None]) 
Y=tf.placeholder(tf.float32,shape=[None])
#컴퓨터가 학습시키면서 변경하는 변수
W=tf.Variable(tf.random_normal([1]),name='weight')
b=tf.Variable(tf.random_normal([1]),name='bias')



hypothesis 정의

#데이터를 구분짓는 직선(예측 값)
hypothesis=X*W+b



cost 함수 정의

#예측 값과 실제 값의 차이
cost=tf.reduce_mean(tf.square(hypothesis-Y))



cost 최소화

#실제 값과 예측 값의 차이를 계속 줄여준다.
optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.0001)
train=optimizer.minimize(cost)



노드들을(tensor) 그래프화

sess=tf.Session()
#변수 초기화
sess.run(tf.global_variables_initializer())



학습을 시작합니다~

#반복문을 돌면서 계속 데이터를 넣는다->w,b가 cost가 최소가 되게 계속 이동
for step in range(2001):
	cost_val,_=sess.run([cost,train],feed_dict={X:x_data,Y:y_data})})
	if(step%100==0):
		print(step,cost_val)



학습 끝! step마다 cost가 줄어드는 것을 보실 수 있습니다.

image



과연 학습이 잘 되었나 확인해볼까요? 수학 점수 92점일 때 결과는??

image


0보다는 1이 더 가깝죠?? 따라서 합격이라고 예측!

수학 점수 58점일 때 결과는??

image


1보다는 0이 더 가깝죠?? 따라서 불합격이라고 예측!

생각보다 잘 작동하는 것 같아 보입니다.

하지만 우리가 원하는 것은 0(불합격)이면 딱 0, 1(합격)이면 딱 1로 반환해줬으면 하는 건데요!!
또 실제로 저 예측값이 항상 0과 1사이인지도 의문입니다.

이것을 해결하여 주는 것이 조금 뒤에 배울 분류(classification)입니다!!!!

일단은 예제 실행해보시고 머신러닝에 대해 대충이라도 이해하셨으면 좋겠습니다!

전체 코드

image