본문 바로가기
머신러닝 기초

[로지스틱 회귀] 시그모이드 그래프가 w와 b에 따라 바뀌는 모양

by 회사원코딩 2022. 7. 31.
반응형

먼저 시그모이드 함수는 아래와 같다.

$$g(z) = \frac{1}{1+e^{-z}}\tag{1}$$

그런데, 로지스틱 회귀의 활성화 함수로 쓰이는 시그모이드에서는 z의 의미가 대략 다음과 같다.

$$z = \sum_{i=0}^{n-1}w_{n}x_{n}+b$$

 

결국 (로지스틱 회귀의) 시그모이드는 모델의 특성인 x의 함수인데,

z 안에 들어 있는 w와 b에 따라서 시그모이드의 형태가 조금씩 바뀌게 된다.

 

이번 포스팅에서는 로지스틱회귀모델의 가중치 w와 편향b의 변화에 따른 그래프의 양상을 보이고자 한다.

 

파이썬으로 시그모이드 함수를 그려보면 아래와 같다.

import matplotlib.pyplot as plt
import numpy as np


def sigmoid(x):
    y = 1 / (1 + np.exp(-x))
    return y


x = np.linspace(-10, 10, 100)
y = sigmoid(x)

plt.plot(x, y)
plt.xlabel("x")
plt.ylabel("sigmoid(x)")
plt.title("sigmoid function")
plt.show()

 

시그모이드함수를 정의한 def 문의 인자를 조금만 수정해보자. (w와 b 추가)

def sigmoid(x, w=1, b=0):
    y = 1 / (1 + np.exp(-(w * x + b)))
    return y

 

W값에 따른 시그모이드 그래프의 변화

 

이제 w값이 변화함에 따라 그래프가 어떻게 변하는지 관찰해보자.

아래의 코드를 실행해본다.

for w in range(-3, 4):
    if not w:  # w != 0
        continue
    x = np.linspace(-10, 10, 100)
    y = sigmoid(x, w, 0)
    plt.plot(x, y)
plt.legend([f"w={i}" for i in range(-3, 4) if i != 0])

plt.show()

w값이 커짐에 따라 step function 형태에 가까워지듯 가파른 경사를 보이게 된다.

w의 절대값이 1보다 작은 경우까지 포함해서 다시 그려보자.

w_list = [-10, -3, -1, -0.3, -0.1, 0.1, 0.3, 1, 3, 10]

for w in w_list:
    x = np.linspace(-50, 50, 100)
    y = sigmoid(x, w, 0)
    plt.plot(x, y)
plt.legend([f"w={i}" for i in w_list])

plt.show()

 

b값에 따른 시그모이드 그래프의 변화

이번에는 편향bias에 따른 그래프의 변화를 관찰해보자. (w는 1로 고정)

plt.figure(figsize=(12, 8))
for b in range(-2, 3):
    x = np.linspace(-10, 10, 100)
    y = sigmoid(x, 1, b)
    plt.plot(x, y)
plt.legend([f"b={i}" for i in range(-2, 3)])

plt.show()

편향의 변화에 따라 그래프가 좌우로 이동하는데,

b가 커질수록 그래프가 왼쪽으로 이동하고,

반대로 b가 작아질수록 그래프는 오른쪽으로 이동하는 것을 확인할 수 있다.

로지스틱 회귀 모델의 특성변수가 딱 한 개인 경우에는

위처럼 시그모이드의 그래프가 최적화되어가는 과정을 그려볼 수 있겠다.

 

반응형

댓글0