본문 바로가기

머신러닝(ML)

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

로지스틱회귀(Logistic Regression)란?

로지스틱 회귀는 사건 발생에 대한 확률을 학습하는 알고리즘이다.
예를 들어, 암발병 여부( 발병이며 1, 정상이면 0 ) 즉, 0 또는 1, - 또는 +에 대한 예측을 위한 알고리즘이 바로  로지스틱회귀( Logistic Regression ) 모델이다.

정리하자면, 종속변수 Y가 연속형 숫자가 아닌 범주( 0 또는 1과 같은 )일 때는 기존 회귀 모델을 적용할 수 없으며, 로지스틱회귀 모델을 적용한다. 머리속에 명확히 그림이 안 그려지더라도 넘어가자 가다보면 그려진다.

 

아래 왼쪽 그림은 종양의 크기에 따라 양성인지 음성인지 판별 여부를 그래프로 나타낸 것이다. X축은 종양의 크기, Y축은 종양의 양성과 음성 여부를 나타낸다. 1이면 양성 0이면 음성이다.

이전에 포스팅 했던 선형 회귀 모델로 정의해서 그래프를 그려보자.
y = w*X 와 같은 그래프가 그려지고 대략 아래 왼쪽 그림과 같이 y > 0.5 보다 크면 양성, y <0.5 보다 작으면 음성으로 판단할 수 있다.

그러나, X : 4.75인 신규 데이터 입력 시 Y > 0.2 양성, Y < 0.2 음성 인 새로운 분류 모델 생성된다. 그렇지 않고 기존 모델 기준인 Y > 0.5 양성, y < 0.5 음성 으로 분류 시 이전 양성이 음성으로 변경된다.

즉, 새로운 데이터가 들어오면 분류의 기준이 달려져서 매번 새로운 기준을 잡아야 하는 상황이 발생한다. 즉, 선형 회귀로는 데이터를 판단할 수 있는 모델을 만들 수가 없다.

그래서 나온 모델이 로지스틱 회귀이다. 로지스틱 회귀에 대해서 알아보자

시그모이드( Sigmoid ) 함수

먼저 시그모이드 함수에 대해서 알아보자.
이항 분류에 적합한 함수로 시그모이드( sigmoid ) 함수가 있다. 그래프의 모양은 아래와 같이 S자 형태의 그래프 모양으로 x=0 을 중심으로 좌측은 0으로 수렴하고 우측은 1로 수렴한다.

sigmoid function

위의 그래프는 종속변수 값이 0 또는 1 값으로 수렴된다.

이제 회귀모델에서 처럼 먼저 가설 함수를 세워보자.

이전 기억을 잠시 떠올려 보면 회귀 모델 생성 시
1. 가설 함수를 세우고
2. 가설 함수에서 발생하는 cost 함수를 구하고
3. cost가 최소인 경사하강법을 통해 w와 b를 구했다.

 

로지스틱 회귀도 마찬가지다. 가설을 정의하면서 시작을 해 보자.

가설( Hypothesis )

선형 회귀 모델에서 가설 함수는  y = w*X + b 라 했다. 그런데, 이 함수는 X값에 따라 종속변수 값이 -∞ ~ ∞ 까지의 값을 가진다. 우리가 원하는 가설 함수는 독립변수값이 어떤 값이여도 종속변수의 값이 0 과 1 사이를 벗어나지 않는 함수 였으면 한다. 하여 sigmoid 함수는 0과 1 사이의 값을 벗어나지 않는다는 점을 착안 하여 가설 함수는아래와 같은 sigmoid 함수로 다시 정의 해 보자.

가설 함수

정리하자면, 범위가  -∞ ~ ∞인 선형 회귀 종속 변수 y의 값을 입력으로 하는 함수를 가설 함수로 정의 한다는 것이다. 이렇게 되면 -∞ ~ ∞의 값이 0 ~ 1 사이의 값으로 귀결된다.

시그모이드 함수의 파이썬 코드는 1 / (1 + math.exp(-z))와 같이 표현한다. 참고만하자.

또한, 위의 시그모이드 함수 그래프를 보면 wX+b > 0 이면 y = 1, wX+b < 0 이면 y = 0이 된다.

이제 w와 b를 찾으면 된다. w와 b를 찾기 위해선 cost 함수를 정의 해야 한다.

코스트 함수( cost function )

Cost 함수의 개념은 가설 함수의 예측 값과 주어진 데이터의 실제값 사이의 차이를 계산하는 함수이다. 그리고, 평균제곱오차(Mean Squared Error, MSE) 즉, 예측된 값과 입력된값 들의 차이에 대한 평균 값을 구한다.

선형 회귀의 cost 함수에 대해서 이미 이해를 했다는 가정하에 로지스틱 회귀에서 사용되는 cost 함수에 대해서 알아 보자.

cost 함수는 측정값과 가설의 예측된 값의 제곱 평균, 즉 평균제곱오차를 나타내는 함수다. 수식으로 표현하면,

이다. 그런데 cost 함수를 그래프로 그려보면 아래 왼쪽 그림과 같다. 즉, 선형 회귀 비용 함수와는 달리 로컬 미니멈이 존재하여 정작 찾아야 할 글로벌 미니멈이 찾을 수 없는 경우가 있다. e가 들어가 있기 때문에 그래프가 아래와 같다.

cost 함수 비교

로지스틱 회귀의 cost 함수를 선형 회귀 비용 함수와 같이 만들 수 있는 방법을 찾아 보자. 문제는 e때문이니 e를 상쇄 시킬 수 있는 e가 밑인 자연로그를 통해서 선형 회귀와 같은 경사하강법을 적용 할 수 있는 cost 함수를 정의해 보자.

Cost 함수는 y=1일때와 y=0일때 나눠서 계산해야 한다. 그리고, Cost 함수 유도는 건너뛰자. 그냥 아래와 같다고만 알고 넘어가자.

로지스틱 회귀에서 사용되는 cost 함수는 다음과 같다.

Cost Function

  • m : 트레이닝 데이터 수
  • y : 트레이닝에 사용 된 x에 대한 실제값

Cost 함수를 정의 했으니 cost가 최소인 값을 찾아 보자. cost 함수를 경사 하강법을 기반으로 정의 했으니 경사 하강법( Gradient Descent )를 이용하자.

경사 하강법

경사 하강법 python 코드는 간단하다. 아래가 전부이다.

from sklearn.linear_model import LogisticRegression

model = LogisticRegression()
model.fit(train_features, train_labels)

예측

경사 하강법을 통해 w와 b를 구했다고 하자. 그럼 새로운 데이터에 대한 분류는 어떻게 할 것인가? 이 포스팅의 첫번째 문장을 다시 읽어 보자.

로지스틱 회귀는 사건 발생에 대한 확률을 학습하는 알고리즘이다.

예측이 필요한 값 x가 들어왔을때, 생성 된  로지스틱 회귀 모델에 의한 결과값은 0 ~ 1 사이의 값이 되고, 만약 그 값이 0.25일 경우, x에 대한 결과가 1일 확률은 25%, 0일 확률은 (100-25%인) 75%가 된다.

확률을 학습하는 알고리즘이라는 말이 이해가 되는가?

결론은 새로운 데이터 x는 0으로 분류된다.

요약

  • 로지스틱 회귀는 확률을 학습하는 알고리즘이다.
  • 0과 1, 양성/음성, +/- 등을 분류하는 분류 알고리즘이다.
  • 선형 회귀와 마찬가지고 가설 함수, 비용 함수 그리고 경사 하강법을 이용한다. 
  • 시그모이드 함수를 이용한 비용 함수를 이용한다.
  • 비용 함수 값이 낮을 수 록 학습이 정확하다