본문 바로가기

CS/머신러닝

[머신러닝] Logistic Classification 텐서플로 구현

728x90


우리가 배운 Logistic regression의 hypothesis, cost function 그리고 gradient descent algorithm


소스코드

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
32
33
34
35
36
37
38
import tensorflow as tf
import numpy as np    #데이터 read를 위한 모듈
 
xy = np.loadtxt('traindata.txt', unpack=True, dtype='float32')
x_data = xy[0:-1]    #모든 x 데이터
y_data = xy[-1]        #하나의 y 데이터
 
= tf.placeholder(tf.float32)
= tf.placeholder(tf.float32)
 
# x의 개수에 따라 가변적인 W가 생성됨
= tf.Variable(tf.random_uniform([1len(x_data)], -1.01.0))
 
# Our hypothesis( 우리가 찾았던 sigmoid형태 )
= tf.matmul(W, X)
hypothesis = tf.div(1.1. + tf.exp(-h))
 
# cost Function
cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))
 
# 우리가 만든 cost function은 밥그릇 모양이 되므로
# 기존에 존재하는 gradient descent algorithm을 사용한다.
= tf.Variable(0.1)  # learning rate, alpha
optimizer = tf.train.GradientDescentOptimizer(a)
train = optimizer.minimize(cost)  # goal is minimize cost
 
# 실행 전에 변수들을 초기화
init = tf.initialize_all_variables()
 
# Launch the graph
sess = tf.Session()
sess.run(init)
 
# 학습과정
for step in xrange(2001):
    sess.run(train, feed_dict={X: x_data, Y: y_data})
    if step % 20 == 0:
        print step, sess.run(cost, feed_dict={X: x_data, Y: y_data}), sess.run(W)
cs

train.txt

#x0 x1 x2 y

1 2 1 0

1 3 2 0

1 3 5 0

1 5 5 1

1 7 5 1

1 2 5 1


여기서 x0는 bias에 사용되므로 무조건 1이 된다.


실행화면

학습이 진행되면서, cost가 줄어드는것을 확일 할 수있다.


우리가 학습한 train.txt의 데이터는 학습시간,출석횟수에 따른 시험 합격여부를 나타낸다.

만약 우리가 학습한 모델을 이용하여 학습한 데이터가 아닌 새로운 데이터의 결과를 예측할 수 있다.

1
2
3
4
5
6
7
8
print '-----------------------------------------'
# 학습한 hypothesis를 이용하여 결과를 찾는다. study hour와 attendance를 가지고 결과를 판단.
# hypothesis를 실행시키는데 X의 변수(공부한 시간)를 bias, study hour, attendance
print sess.run(hypothesis, feed_dict={X: [[1], [2], [2]]}) > 0.5 #2시간 공부, 2번 출석
print sess.run(hypothesis, feed_dict={X: [[1], [5], [5]]}) > 0.5 #5시간 공부, 5번 출석
print sess.run(hypothesis, feed_dict={X: [[11], [40], [210]]}) > 0.5 # 2명 동시에 가능
# 4시간 공부, 2번 출석
# 0시간 공부, 10번 출석
cs
위 소스코드를 기존 소스코드 뒤에 넣어서 실행하면 아래와 같은 결과가 나타난다.