Immersion In Data

AI

[AI] Logistic Regression

sungjunminn 2022. 8. 17. 15:32

1. Logistic Regression

회귀 분석 방식의 핵심 기능 중 하나인 로지스틱 회귀는 선형 분석(Linear Regression)과 가장 큰 차이점이 있는데, 값이 아닌 확률로서 분류한다는 점이다. 기존의 선형 회귀 분석에서는 단순히 입력한 값을 그대로 독립변수로 받아서 사용하다 보니 평균보다 차이가 큰 값이 입력되면 값이 크게 달라져 버리는 문제점이 있다. 이를 개선하기 위해 로지스틱 회귀에서는 시그모이드 계산을 사용한다. 입력값을 비율로 변환하여 항상 0과  1사이의 값으로 한정시켜 범위를 벗어나는 경우를 예방하고 정확도가 떨어지는 것을 방지한다. 

 

2. Sigmoid

입력 값을 비율로 변환하는 것이 시그모이드의 가장 큰 기능이다. 입력 값이 어느 숫자든 상관없이 결과 값이 항상 0과 1사이에 있도록 하며 중간 값인 0.5 이상의 값은 성공, 그 이하의 값은 실패로 계산한다.로지스틱 회귀는 시그모이드 함수를 사용해서 입력 값을 0과 1 사이 값으로 변환한 후 최적화 함수를 통해 예상 값을 구하는 방법이다. 값이 아닌 비율로 계산하는 만큼 일반적인 범주형 데이터를 입력받을 수 있고, 이산형(0과 1, 참과 거짓) 뿐만 아니라 다항형 또는 분화형으로 계산할 수 있어 예측과 분류 2가지 모델을 만들 수 있다. 아래 그래프를 살펴보면, x축의 -6부터 6까지의 값은 입력값인 독립변수를 의미하고, y축의 0부터 1까지 값은 종속변수를 의미한다. 즉 -6일때는 결과 값이 0이고, 6일때는 결과 값이 1이라는 뜻입니다. -6과 6 사이의 값은 0부터 1 사이의 값으로 나오며, 결과 값 0.5를 기준으로 왼쪽은 실패, 오른쪽은 성공으로 계산한다. 

 

 

import tensorflow as tf

x_data = [ [1,2], [2,3], [3,1], [4,3], [5,3], [6,2]]
y_data = [ [0], [0], [0], [1], [1], [1] ]

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

#W : 가중치, b : 편향
W = tf.Variable(tf.random_normal([2,1]), name='weight')
b = tf.Variable(tf.random_normal([1]), name='bias')

#가설 설정 
hypothesis = tf.sigmoid(tf.matmul(X, W) + b)
cost = - tf.reduce_mean(Y+tf.log(hypothesis) 
        + (1-Y)*tf.log(1-hypothesis))

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

#가설이 0.5보다 크면 참, 작으면 거짓
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{:4} : cost={:6.4f}'.format(step, cost_val))

# Accuracy report
h, c, a = sess.run([hypothesis, predicted, accuracy], 
    feed_dict={X:x_data, Y:y_data})
print("\n hypothesis : {}, Correct: {}, 
    Accuracy: {}".format(h, c, a))

'AI' 카테고리의 다른 글

[AI] Random Forest  (0) 2022.08.19
[AI] Decision Tree  (0) 2022.08.18
[AI] K-NN(K-Nearest Neighbor)  (0) 2022.08.18
[AI] RBM(Restricted Boltzmann Machine)  (0) 2022.08.17
[AI] LSTM(Long Short Term Memory)  (0) 2022.08.16