Deep Learning: Logistic Regression
Logistic Regression
Binary Classification(이진 분류 : 0 or 1)을 위한 simple model (simplest neural network)
Sigmoid 함수
- 앞서 살펴본 Linear Regression과의 가장 큰 차이로, sigmoid 함수는 0과 1 사이의 값을 반환한다. (따라서 binary classification 문제에 적합하다.)
- 선형 함수가 아닌, 완만한 S자형인 sigmoid 함수를 사용함으로써 이상치 문제를 해결하고 연속된 값을 전달할 수 있다.
- 나중에 이용하게될 sigmoid 함수의 미분은 아래와 같다.
Cost function
Logistic Regression에서는 Loss function으로 Binary Cross Entropy를 이용한다! 위 식에 y가 1인 경우, 0인 경우를 직접 대입해보면 빠르게 이해 될 것이라 생각한다.
Gradient Descent
다음은 Gradient Descent를 위해 model parameter에 따른 미분값을 구하는 과정이다. 이전에 Linear Regression 때와 마찬가지로 Chain Rule을 이용하였다. 다른 점은 sigmoid 함수의 미분 정도이다! (앞에 있으니 참고!)
Implement
이제 공부한 내용을 이용하여 AND Operator를 구현해보자! (AND, OR 등은 구현 가능하지만, XOR은 불가능하다. 선형 분리가 불가능하기 때문!)
우선 데이터를 준비한다.
import numpy as np
import matplotlib.pyplot as plt
import random
from math import exp, log
X = [(0,0), (1,0), (0,1), (1,1)]
Y = [0,0,0,1]
train_loss_list = []
다음은 Logistic Regression 모델이다.
class AND_operator():
def __init__(self):
self.w = np.random.random(size=2)
self.b = np.random.random(size=1)
def sigmoid(self, z):
return 1/(1+exp(-z))
def predict(self, x):
z = np.inner(self.w, x)+self.b
a = self.sigmoid(z)
return a
데이터와 모델을 이용하여 학습을 진행하는 code이다.
def train(X, Y, model, lr=0.1):
dw0 = 0.0
dw1 = 0.0
db = 0.0
m = len(X)
cost = 0.0
for x,y in zip(X, Y):
a = model.predict(x)
if y==1:
cost-=log(a)
else:
cost-=log(1-a)
dw0+=(a-y)*x[0]
dw1+=(a-y)*x[1]
db+=(a-y)
cost/=m
train_loss_list.append(cost)
model.w[0]-=lr*dw0/m
model.w[1]-=lr*dw1/m
model.b-=lr*db/m
return cost
학습을 진행하고, Loss의 변화를 그래프로 그려보는 부분이다.
for epoch in range(10000):
cost = train(X, Y, model, 0.01)
if epoch%100==0:
print(epoch, cost)
plt.figure()
plt.title("train loss")
x1 = np.arange(0, len(train_loss_list))
plt.plot(x1, train_loss_list)
Loss가 떨어지며 학습이 잘 진행된 것을 확인할 수 있다 !
Author And Source
이 문제에 관하여(Deep Learning: Logistic Regression), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@danbibibi/Deep-Learning-Logistic-Regression저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)