- toc {:toc}
이 글은 김성범 교수님의 [핵심 머신러닝] 로지스틱회귀모델 강의를 정리했음을 밝힙니다.
로지스틱 회귀란?
로지스틱 회귀의 정의
로지스틱 회귀(영어: logistic regression)는 영국의 통계학자인 D. R. Cox가 1958년[1]에 제안한 확률 모델로서 독립 변수의 선형 결합을 이용하여 사건의 발생 가능성을 예측하는 데 사용되는 통계 기법이다.
로지스틱 회귀는 일반적인 선형 모델의 특수한 경우로 볼 수 있으므로 선형 회귀와 유사하다. (출처: 위키피디아)
로지스틱 회귀 또한 선형 회귀와 같이 변수간의 관계를 통해 값을 도출한다. 하지만 연속형 데이터를 다루는 선형 회귀와 다르게 종속 변수가 통과 여부와 같은 범주형 데이터를 대상으로 한다는 점에서 차이가 있다.
로지스틱 회귀에서는 데이터가 특정 범주에 속하는 것을 예측하기 위해 다음의 과정을 거친다.
-
모든 속성들의 계수와 절편을 0으로 초기화한다.
-
각 속성들의 값에 계수를 곱해서 log-odds를 구한다.
-
log-odds를 sigmoid 함수에 넣어서 [0, 1] 범위의 확률
를 구한다. -
출력한 확률값을 Negative Log Likelihood 혹은 Binary Cross Entropy를 통해 오차를 최소화하는 방향으로 학습한다.
과정이 쉽사리 이해되지 않을 것이다. 로지스틱 회귀의 과정을 수식과 함께 따라가보자.
로지스틱 회귀 배경
범주형 데이터를 예측하기 위해서는 예측값이 0 또는 1을 나타내야 하고 이를 파라미터를 포함한 선형 회귀식으로 나타내면 아래 1)과 같다.
Y는 예측값, X는 입력값을 나타내고,
이때
- 베르누이
- 베르누이 시행 : 동전의 앞면 뒷면과 같이 결과가 두가지 중 하나로만 나오는 실험이나 시행을 말한다.
- 베르누이 확률변수 : 베르누이 시행의 결과를 실수 0 또는 1로 바꾼 것을 말한다.
- 베르누이 확률분포 : 베르누이 확률 변수의 분포를 말한다. 베르누이 확률분포는 1이 나올 확률을
로 나타내고 0이 나올 확률을 로 나타낸다. - 베르누이 확률분포를 하나의 수식으로 표현하면 다음과 같이 쓸 수 있다.
3, 4번의 경우 예측값이 1이 나오는 확률을
즉, 예측값은 X값이 주어졌을 때 출력변수 Y가 1을 가질 확률을 뜻한다.
{:.lead}
하지만 범주형 데이터를 선형 회귀와 로지스틱 회귀를 통해 간단하게 그래프로 나타내보면 아래와 같은 그래프가 나온다. 왼쪽이 선형 회귀, 오른쪽이 로지스틱 회귀의 그래프다.
선형 회귀의 경우 값이 무한대로 뻗어 나가기 때문에 0, 1로 이루어진 범주형 데이터를 나타내기 적합하지 않다.
하지만 로지스틱 회귀의 경우 점차 수렴해나가는 형태이기 때문에 특정 임계값으로부터 어떤 위치에 값이 있느냐에 따라서 나타낼 수 있다.
때문에 로지스틱 회귀에서는 로지스틱 함수가 사용된다. 로지스틱 함수는 시그모이드 함수(S자형 곡선 또는 시그모이드 곡선을 갖는 수학 함수)의 일종이다. 로지스틱 함수를 수식으로 표현하면 다음과 같다.
- 로지스틱 함수 특징
- Logistic function, Sigmoid function, Squashing function이라 부른다.
- 입력값이
의 범위에서 입력될 때 0~1사이의 값을 출력하는 함수이다. - 큰 입력값을 가지더라도 작은 출력값을 출력하고 양 끝으로 갈수록 미분값이 0으로 수렴하기 때문에 Squashing function이라 한다.
- 미분 결과를 함수로 표현할 수 있다.
로지스틱 함수를 이용해 로지스틱 회귀식을 나타내면 아래와 같다.
1번은 단순 로지스틱 회귀모델, 2번은 다항 로지스틱 회귀모델의 식이다.
로지스틱 회귀를 하는 목적을 다시 생각해보면 우리는 사건의 발생가능성을 예측하는 것이 목적이고 더 자세하게 들어가면 입력값과 작용하는 최적의 파라미터의 값을 구하는 것이 우리의 목적이다.
하지만 로지스틱 함수를 적용한 로지스틱 회귀식은 비선형적이기 때문에 직관적으로 파라미터를 이해할 수 없다.
때문에 로지스틱 회귀에서는 logit이라는 개념이 추가된다.
Logit(Log-Odds)
Logit이라는 개념은 Log와 Odds의 개념이 합쳐진 것을 말한다.
여기에 사용되는 Odds에 대해 알아보자.
Odds(승산)
Odds는 승산을 뜻한다.
- 승산 : 성공 확률을 p로 정의할 때, 실패 대비 성공 확률 비율
로지스틱 함수에 Odds 개념을 대입하고, log를 사용해 logit 변환을 시행한다.
logit 변환을 시행하면 위와 같은 형태로 선형의 형태로 나오기 때문에 x가 증가할 때 log(Odds)가 증가한다는 이전보다 직관적인 해석이 가능해진다.
개인적으로는 정의에서 말했던 선형 회귀의 특별한 경우라는 말 뜻은 위처럼 logit 변환을 했을 때 선형으로 볼 수 있기 때문이라 생각했다.
자, 이제 다중 로지스틱 회귀 모델로 확장시켜보자.
다중 로지스틱 회귀모델
위와 같은 형태로 표현이 된다.
다음은 로지스틱 회귀모델을 어떻게 학습할 것인가에 대한 것이다.
학습
선형 회귀에서와 같이 제곱 오차 함수를 사용한다고 생각해보자. 제곱 오차 함수의 식은 아래와 같았다.
함수 f가 선형이었을 때는 제곱을 할 경우 최고차항이 2차인 그래프로 그려지면서 최소점을 찾을 수 있었다. 하지만 함수 f가 로지스틱 함수(시그모이드 함수)일 때는 제곱을 할 경우 파라미터가 비선형적으로 되기 때문에 Local Minima가 발생하고 Gradient Descent를 진행했을 때 Local Minima에 빠지는 경우가 발생한다. 때문에 제곱 오차 함수를 사용하는 대신 Likelihood 개념을 사용한다.
Local Minima에 대한 설명은 Global & Local Minima, Saddle Point 에서 설명했다.
최대 우도 추정법(Maximum Likelihood Estimation)
우도에 대한 이해에 관해서는 확률(Probability) vs 가능도(Likelihood)를 참고하고 최대한 이해하고자 노력했다. (정확히 이해한 것 같지는 않다.)
위에서 우리는 확률함수를 정의했다.
여기서 likelihood 함수를 정의하면 아래와 같다.
likelihood 함수에 log를 사용해 log likelihood 함수를 나타내보면 아래와 같다.
log likelihood 함수를 1-1, 1-2로 변환할 수 있다. 두 가지로 변환한 이유는 1-1번의 수식이 Binary Cross Entropy와 동일함을 보이는 수식이고 1-2번은 파라미터에 대한 비교적 직관적인 변환을 위함이다. 2번에서 -를 기준으로 왼쪽 식은 Odds로 생각할 수 있고 3번으로 변환할 수 있다.
알고자 하는 파라미터가 비교적 직관적으로 보이고 위 log likelihood 함수가 최대가 되는 파라미터
하지만 이렇게 구한 log likelihood 함수도 Loss function으로 생각할수는 없다. 이는 Loss의 의미를 생각했을 때 손실이 낮아지는 파라미터값이 최적의 값이지만 log likelihood는 최대가 되는 값이 최적의 값이기 때문이다. 때문에 -를 붙여 Negative Log Likelihood(NLL)를 손실함수로 사용한다.
로지스틱 회귀를 정리하는 3일동안 계속해서 왜 log likelihood와 Cross-Entropy의 차이, log likelihood는 Loss function으로 사용하지 않는 것인지 둘 사이의 관계를 명확하게 이해하지 못했다. 이 부분은 추후 추가해야 할 것 같다.
Cross Entropy
Cross-Entropy의 설명은 아래 포스트에서 설명했다.
- Cross Entropy : 두 확률분포 (
)의 차이
Cross-Entropy의 수식은 아래와 같다.
- Cross Entropy : 음의 log likelihood function의 기댓값
- Cross Entropy를 최소화하는 것은 log likelihood function을 최대화하는 것과 같다.
- Cross Entropy를 최소화하는 것은 입력 분포 p(x)와 출력분포 q(x)의 차이를 최소화하는 것이다.
Binary Cross Entropy
이진 분류를 진행한다고 생각하고 Cross Entropy를 생각해보자. 이진 분류이기 때문에 출력되는 클래스가 0, 1이다.
y = 1일 경우
y = 0일 경우
두 경우를 모두 고려할 수 있도록 합친다.
y = 0 이라면
그리고 위 log likelihood 함수에서 1-1번 식을 Negative Log Likelihood로 나타내면 아래와 같다.
이를 Binary Cross Entropy와 비교하면 같은 형태를 가지고 있다는 것을 알 수 있다.
최종적으로 이렇게 도출해낸 NLL, BCD를 Loss function으로 이용하여 오차를 구하고 학습을 진행할 수 있다.
- 다음 과정을 확인하면서 각 개념을 상기시켜보자.
-
모든 속성들의 계수와 절편을 0으로 초기화한다.
-
각 속성들의 값에 계수를 곱해서 log-odds를 구한다.
-
log-odds를 sigmoid 함수에 넣어서 [0, 1] 범위의 확률
를 구한다. -
출력한 확률값을 Negative Log Likelihood 혹은 Binary Cross Entropy를 통해 오차를 최소화하는 방향으로 학습한다.