AI/머신러닝

[머신러닝] 로지스틱 회귀(Sigmoid & Softmax)

caramel-bottle 2023. 12. 28.

1. 로지스틱 회귀(Logistic Regression)

로지스틱 회귀는 이진 분류 문제를 해결하는 기법중 하나입니다.

 

분류 문제에 선형 모델이 사용되기 때문에 회귀라는 이름이 붙었다고 합니다.

 

0과 1을 분류하는 문제가 있다고 가정해봅시다.

 

직선으로 분류를 한다면 확률이 0과 1사이를 벗어나게 됩니다.

 

확률을 0과 1사이로 제한하기 위한 방법으로 Sigmoid함수를 사용합니다.


2. 시그모이드(Sigmoid) 함수

Sigmoid함수는 위와 같이 0과 1사이에 S자 형태의 그래프입니다. 시그모이드 함수의 수식은 다음과 같습니다.

w(가중치)와 b(편향)에 따라 변하는 시그모이드 함수를 시각화하여 확인해봅시다.

 

import numpy as np
import matplotlib.pyplot as plt

 

w=1, b=0

# 시그모이드 함수
def sigmoid(x):
    return 1/(1+np.exp(-x))

# x 범위 지정
x = np.arange(-5.0, 5.0, 0.1)

# w=1, b=0
y = sigmoid(x)

# 그래프
plt.plot(x, y, 'g')
plt.plot([0,0],[1.0,0.0], ':') # 가운데 점선 추가
plt.title('Sigmoid Function')
plt.show()

output>>

 

w=0.5, 1, 2

# 시그모이드 함수
def sigmoid(x):
    return 1/(1+np.exp(-x))

# x 범위 지정
x = np.arange(-5.0, 5.0, 0.1)

# w=0.5
y1 = sigmoid(0.5*x)
# w=1
y2 = sigmoid(x)
# w=2
y3 = sigmoid(2*x)

# 그래프
plt.plot(x, y1, 'r', linestyle='--', label='w=0.5') # w의 값이 0.5일때
plt.plot(x, y2, 'g', label='w=1') # w의 값이 1일때
plt.plot(x, y3, 'b', linestyle='--', label='w=2') # w의 값이 2일때
plt.plot([0,0],[1.0,0.0], ':') # 가운데 점선 추가
plt.title('Sigmoid Function')
plt.show()

output>>

선형 회귀에서 직선을 표현할 때, w는 기울기를 의미했지만 여기선 그래프의 경사도를 의미합니다.

 

w가 커질수록 그래프의 경사도가 커집니다.

 

b=0.5, 1, 1.5

b의 변화에 따른 그래프 변화도 확인해봅시다.

x = np.arange(-5.0, 5.0, 0.1)
y1 = sigmoid(x+0.5)
y2 = sigmoid(x+1)
y3 = sigmoid(x+1.5)

plt.plot(x, y1, 'r', linestyle='--', label='b=0.5') # b의 값이 0.5일때
plt.plot(x, y2, 'g', label='b=1') # b의 값이 1일때
plt.plot(x, y3, 'b', linestyle='--', label='b=1.5') # b의 값이 1.5일때
plt.plot([0,0],[1.0,0.0], ':') # 가운데 점선 추가
plt.title('Sigmoid Function')
plt.legend()
plt.show()

output>>



b는 그래프를 이동시키네요. 

 

시그모이드 함수는 입력값이 커지면 1에 수렴하고 작아지면 0에 수렴하는 특성을 가지고 있습니다.

 

이러한 특성으로 이진 분류에 사용됩니다.


 

댓글