# Lab 05 Logistic Classification(Regression)
* Logistic Classfication은 True or False와 같은 Binary나 복수개의 다항 분류에 쓰입니다 (Bernoulli Distribution)

### 기본 Library 선언 및 Tensorflow 버전 확인


```python
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
import tensorflow as tf

print(tf.__version__)
```

    1.10.0


### 강의에 설명할 Data입니다
* x_data가 2차원 배열이기에 2차원 공간에 표현하여 x1과 x2를 기준으로 y_data 0과 1로 구분하는 예제입니다
* Logistic Classification 통해 보라색과 노란색 y_data(Label)을 구분해 보겠습니다.


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

x1 = [x[0] for x in x_data]
x2 = [x[1] for x in x_data]

colors = [int(y[0] % 3) for y in y_data]
plt.scatter(x1,x2, c=colors)

plt.xlabel("x1")
plt.ylabel("x2")
plt.show()
```

### 위 Data를 기준으로 가설의 검증을 통해 Logistic Classification 모델을 만들도록 하겠습니다
* X,Y는 실재 학습에 쓰일 Data (placeholder)
* W와 b은 학습을 통해 생성되는 모델에 쓰이는 Wegith와 Bias (초기값을 variable : 0이나 Random값으로 가능 tf.random_normal([2, 1]) )


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

W = tf.Variable(tf.zeros([2,1]), name='weight')
b = tf.Variable(tf.zeros([1]), name='bias')
```

### Sigmoid 함수를 가설로 선언합니다
* Sigmoid는 아래 그래프와 같이 0과 1의 값만을 리턴합니다 tf.sigmoid(tf.matmul(X, W) + b)와 같습니다

$$
\begin{align}
sigmoid(x) & = \frac{1}{1+e^{-x}}  \\\\\
\end{align}
$$




```python
hypothesis  = tf.div(1., 1. + tf.exp(tf.matmul(X, W) + b))
```

### 가설을 검증할 Cost 함수를 정의합니다
$$
\begin{align}
cost(h(x),y) & = −log(h(x))  &  if  &  y=1 \\\\\
cost(h(x),y) & = -log(1−h(x))  &  if  &  y=0
\end{align}
$$
* 위 두수식을 합치면 아래과 같습니다
$$
\begin{align}
cost(h(x),y) & = −y log(h(x))−(1−y)log(1−h(x))
\end{align}
$$


```python
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를 기준(Sigmoid 그래프 참조)로 0과 1의 값을 리턴합니다.
* Sigmoid 함수를 통해 예측값이 0.5보다 크면 1을 반환하고 0.5보다 작으면 0으로 반환합니다.


```python
predicted = tf.cast(hypothesis > 0.5, dtype=tf.float32)
```

### 가설을 통해 실재 값과 비교한 정확도를 측정합니다


```python
accuracy = tf.reduce_mean(tf.cast(tf.equal(predicted, Y), dtype=tf.int32))
```

### Tensorflow를 통한 실행을 위해 Session를 선언합니다.
* 위의 Data를 Cost함수를 통해 학습시킨 후 모델을 생성합니다. 
* 새로운 Data를 통한 검증 수행 [5,2]의 Data로 테스트 수행 (그래프상 1이 나와야 정상입니다)
* 새로운 Data를 통한 검증 수행 [2,2]의 Data로 테스트 수행 (그래프상 0이 나와야 정상입니다)


```python
test_x1 = [[5,2]] 
test_x2 = [[2,2]] 

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 % 1000 == 0:
            print(step, cost_val)

    # Accuracy report
    h, c, a = sess.run([hypothesis, predicted, accuracy],
                       feed_dict={X: x_data, Y: y_data})
    print("\nHypothesis: ", h, "\nCorrect (Y): ", c, "\nAccuracy: ", a)
#     print("W value : ", sess.run(W))
#     print("b value : ", sess.run(b))
    print("[5,2] : ",   sess.run(predicted,feed_dict={X:test_x1}))
    print("[2,2] : ",   sess.run(predicted,feed_dict={X:test_x2}))
```

    0 0.6931472
    1000 0.41448987
    2000 0.34960732
    3000 0.3013888
    4000 0.26361898
    5000 0.23360115
    6000 0.20939068
    7000 0.18956773
    8000 0.17310147
    9000 0.15924035
    10000 0.1474307
    
    Hypothesis:  [[0.02987642]
     [0.1576593 ]
     [0.30070737]
     [0.78328896]
     [0.9407705 ]
     [0.98057085]] 
    Correct (Y):  [[0.]
     [0.]
     [0.]
     [1.]
     [1.]
     [1.]] 
    Accuracy:  1
    [5,2] :  [[1.]]
    [2,2] :  [[0.]]


ee6d9a1db4a58eceb673cd7377557fdccff4f766
ipynb
Jupyter Notebook
03_TensorBoard/lab-05-1-logistic_regression.ipynb
jetsonworld/TensorFlow_On_JetsonNano
216b21f63cb0a33e1a2a4d39be8d250c5ce1b504
MIT
2021-01-30T14:35:42.000Z
2021-07-19T06:55:34.000Z
03_TensorBoard/lab-05-1-logistic_regression.ipynb
jetsonworld/TensorFlow_On_JetsonNano
216b21f63cb0a33e1a2a4d39be8d250c5ce1b504
MIT
2020-06-12T15:05:14.000Z
2020-06-23T03:40:46.000Z
03_TensorBoard/lab-05-1-logistic_regression.ipynb
jetsonworld/TensorFlow_On_JetsonNano
216b21f63cb0a33e1a2a4d39be8d250c5ce1b504
MIT
2021-01-30T14:35:46.000Z
2021-08-13T02:57:39.000Z
Qwen/Qwen-72B
1. YES
2. YES