ABOUT ME

-

  • Logistic Regression
    Application programming/TensorFlow 2020. 6. 6. 15:31
    <Logistic Regression>
    
    import tensorflow as tf
    # import os
    # os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
    # 두 가지 분류를 활용할 수 있는 몇 가지 예제를 설명하고 있다.
    # 스팸 메일 탐지, 페이스북 피드 표시, 신용카드 부정 사용은 두 가지 값 중의 하나를
      선택하게 된다.
    # 프로그래밍에서는 이 값을 boolean 이라고 부르지만, 여기서는 쉽게 1과 0으로 구분한다.
      1은 spam, show, fraud 에 해당.
    # 1과 0에 특별한 값을 할당하도록 정해진 것은 아니다. 다만 찾고자 하는 것에 1을 붙이는
      것이 일반적이다.
    x_data = [[1, 2], [2, 3], [3, 1], [4, 3], [5, 3], [6, 2]]
    y_data = [[0], [0], [0], [1], [1], [1]]
    # placeholders for a tensor that will be always fed.
    X = tf.placeholder(tf.float32, shape=[None, 2])
    Y = tf.placeholder(tf.float32, shape=[None, 1])
    
    W = tf.Variable(tf.random_normal([2, 1]), name='weight')
    b = tf.Variable(tf.random_normal([1]), name='bias')
    
    # Hypothesis using sigmoid: tf.div(1., 1. + tf.exp(tf.matmul(X, W)))
    # Linear Regression 의 Wx+b라는 공식을 사용하면 W가 1/2 였을 때, x의 값이 100인 경우
      50이라는 높은 값이 나옴.
    # 0과 1만을 사용해야 하는데, 범위를 벗어나는 값이 나오게 된다.
    # 50보다 작으면 0, 크면 1이라고 표현하거나 1/2보다 작으면 0, 크면 1이라고 표현할 수
      있는 추가 코드가 필요함.
    # 그래서 시그모이드를 사용하며 시그모이드는 Linear Regression 에서 가져온 값을 0과 1
      사이의 값으로 변환한다.
    hypothesis = tf.sigmoid(tf.matmul(X, W) + b)
    
    # cost/loss function
    # 시그모이드 함수의 그래프를 보면 매끄럽지 않고 울퉁불퉁한 그래프가 나오기 때문에 그걸
      펴주지 않으면 global minimum 이 아닌 local minimum 에서 최저점으로 인식해버릴 수
      있기 때문에 새로운 코스트 함수가 필요함.
    # 그래프를 피기 위해서 로그가 등장한다.
    # 원래는 -log(H(x)) - (y == 1) / -log(1-H(x)) - (y == 0) 두 식이 필요한데
      둘을 합친게 아래의 코스트 식이다.
    # y == 1그래프가 전체 그래프의 왼쪽을, y == 0이 오른쪽을 담당한다
    
    cost = -tf.reduce_mean(Y * tf.log(hypothesis) + (1 - Y) * tf.log(1 - hypothesis))
    train = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(cost)
    
    # Accuracy computation
    # True if hypothesis>0.5 else False
    predicted = tf.cast(hypothesis > 0.5, dtype=tf.float32)
    accuracy = tf.reduce_mean(tf.cast(tf.equal(predicted, Y), dtype=tf.float32))
    
    # Launch graph
    with tf.Session() as sess:
       # Initialize TensorFlow variables
       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, '\t', cost_val)
    
       # Accuracy report
       h, c, a = sess.run([hypothesis, predicted, accuracy],
                          feed_dict={X: x_data, Y: y_data})
       print("\nHypothesis: \n", h, "\nCorrect (Y): \n", c, "\nAccuracy: \n", a)

    'Application programming > TensorFlow' 카테고리의 다른 글

    MNIST  (0) 2020.06.06
    Fancy Softmax classification  (0) 2020.06.06
    Softmax classification  (0) 2020.06.06
    Multi variable input & Load data  (0) 2020.06.06

    댓글

Designed by Tistory.