[Tensorflow]7.Logistic(regression) classifier(2)


Logistic(regression) classifier(2)


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

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

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

import tensorflow as tf



그리고 실제 대학생의 데이터를 선언해줍니다.

x_data=[[100,92,95,72],[92,88,80,66],[70,59,68,77]]
# [학생1[국,영,수,과],학생2[국,영,수,과],학생3[국,영,수,과]]
y_data=[[1],[1],[0]] #합격(1) 합격 불합격(0)



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

#한 명당 속성이 4이므로 x_data를 담을 틀인 X의 shape는 [None,4]
X=tf.placeholder(tf.float32,shape=[None,4]) 
Y=tf.placeholder(tf.float32,shape=[None,1])
#W의 shape는 X의 shape와 행렬곱해서 Y의 shape가 되어야하므로 [4,1]
W=tf.Variable(tf.random_normal([4,1]),name='weight')
b=tf.Variable(tf.random_normal([1]),name='bias')



hypothesis 정의

#sigmoid로 다시 정의된 hypothesis
hypothesis=tf.sigmoid(tf.matmul(X,W)+b)



cost 함수 정의

#새로 정의된 cost 함수 (예측 값과 실제 값의 차이)
cost=-tf.reduce_mean(Y*tf.log(hypothesis)+(1-Y)*tf.log(1-hypothesis))



cost 최소화

#실제 값과 예측 값의 차이를 계속 줄여준다.
optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.000001)
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



과연 학습이 잘 되었나 확인해볼까요? 국어 88점, 영어 92점, 수학 90점, 과학 80점 과연 결과는???

image


저번에 1 밖으로 넘어가는 예측 값이 0과 1사이의 수로 나타난 것을 볼 수 있습니다!

그리고 cast함수를 써서 반올림을 해주면~~

image

tf.cast 함수는 형변환 함수입니다~
result>0.5에 따라 True 또는 false가 나오는데 이를 실수로 형변환 시키는 것입니다.



우리가 전에 원했던 0 또는 1로 예측 값이 나오게 됩니다~ 결과는 0 불합격으로 나오네요!

물론 3명의 학생의 데이터만을 이용하여 학습하였기에 정확도는 엄청 낮습니다.
하지만 학습 데이터양만 늘리면 될 뿐 전체적인 구조는 위랑 똑같습니다~

학습데이터가 엄청 많다면 쪽집게 대학합격 프로그램이 될지도~~

전체 코드

image