Logistic (Regression) Classification 수업


개요(Abstract)
아래의 내용은 hunkim님의 모두를 위한 머신러닝/딥러닝 강의에서 tensorFlow 사용 예제를 R로 변경한 내용이다.
hunkim님의 강좌 주소는 http://hunkim.github.io/ml/ 이다.
아래의 내용은 Logistic (Regression) Classification 수업에 있는 python 코드를 R로 변경한 것이다.
언어에 맞게 문법을 변경하고, 코드 흐름은 python에서 사용하는 부분과 같다. 아주 쉽게 R로 변환할 수 있었다.

아래의 R 코드에서 주석 처리된 부분은 tensorFlow를 python에서 사용하는 코드이다.
# import tensorflow as tf
library(tensorflow)


# python 코드
# x_data = [[1, 2],
#           [2, 3],
#           [3, 1],
#           [4, 3],
#           [5, 3],
#           [6, 2]]
# y_data = [[0],
#           [0],
#           [0],
#           [1],
#           [1],
#           [1]]

x_data <- cbind(c(1, 2, 3, 4, 5, 5), c(2, 3, 1, 3,3, 2))
y_data <- c(0, 0, 0, 1, 1, 1)
y_data <- as.matrix(y_data)


# X = tf.placeholder(tf.float32, shape=[None, 2])
# Y = tf.placeholder(tf.float32, shape=[None, 1])
X = tf$placeholder(tf$float32, shape=list(NULL, 2))
Y = tf$placeholder(tf$float32, shape=list(NULL, 1))


# W = tf.Variable(tf.random_normal([2, 1]), name="weight")
# b = tf.Variable(tf.random_normal([1]), name="bias")
W = tf$Variable(tf$random_normal(shape = shape(2L, 1L)), name="weight")
b = tf$Variable(tf$random_normal(shape = shape(1L)), name="bias")


         
# Hypothesis using sigmoid: tf.div(1., 1. + tf.exp(tf.matmul(X, W)))
# hypothesis = tf.sigmoid(tf.matmul(X, W) + b)
hypothesis = tf$sigmoid(tf$matmul(X, W) + b)


# cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))
cost = -tf$reduce_mean(Y * tf$log(hypothesis) + (1 - Y) * tf$log(1 - hypothesis))


# train = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(cost)
train = tf$train$GradientDescentOptimizer(learning_rate=0.01)$minimize(cost)


# predicted = tf.cast(hypothesis > 0.5, dtype=tf.float32)
# accuracy = tf.reduce_mean(tf.cast(tf.equal(predicted, Y), dtype=tf.float32))
predicted = tf$cast(hypothesis > 0.5, dtype=tf$float32)
accuracy = tf$reduce_mean(tf$cast(tf$equal(predicted, Y), dtype=tf$float32))



# with tf.Session() as sess:
#     sess.run(tf.global_variables_initializer())
# 
#     for step in range(10001):
#         cost_val, _ = sess.run([cost, train], feed_dict={X: x_data, Y: y_data})
#     
#         if step%200 == 0:
#             print(step, cost_val)
sess <- tf$Session() 
sess$run(tf$global_variables_initializer())

for (step in 1:10001 ) {
    # train은 반환값이 없어 NULL이 리턴됨
    # rst.run = sess$run(train, dict(X=x_data, Y=y_data))
    rst.run = sess$run(list(cost, train), dict(X=x_data, Y=y_data))
    
    if (step %% 200 == 0) {
        # rst.run[[1]]은 cost
        cat(step, "-", sess$run(W), sess$run(b), rst.run[[1]], "\n")
    }
        
}


# 결과 확인 부
# h, c, a = sess.run([hypothesis, predicted, accuracy], feed_dict={X: x_data, Y: y_data})
# print("\nHypothesis: ", h, "\nCorrect (Y): ", c, "\nAccuracy: ", a)

rst.run <- sess$run(list(hypothesis, predicted, accuracy), dict(X = x_data, Y = y_data))
names(rst.run) <- c("hypothesis", "predicted", "accuracy")
(rst.run)

sess$close()

print("END OF CODE")

댓글 없음:

댓글 쓰기