본문 바로가기
AI Research/Artificial Intelligence

[인공지능 기초] 선형 회귀(Linear Regression)와 로지스틱 회귀(Logistic Regression) - 2

by ga.0_0.ga 2023. 2. 28.
728x90
반응형

이번 포스팅에서는 로지스틱 회귀에 대해 다루도록 하겠습니다.

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

로지스틱 회귀는 회귀를 사용하여 데이터가 어떤 범주에 속할 확률을 0~1사이로 예측하고, 그 확률에 따라 가능성이 더 높은 범주에 속하는 것으로 분류해주는 supervised learning 알고리즘입니다. 어떤 메일을 받았을 때 정상 메일인지, 스팸 메일인지 분류한다거나, 시험 점수를 보고 합격인지 불합격인지 분류하는 문제등이 이에 속합니다. 이렇게 데이터가 2개의 범주중 하나로 분류되도록하는 것을 이진 분류(binary classification)이라고 합니다.

로지스틱 회귀에서는 데이터가 트겅 범주에 속할 확률을 예측하기 위해 아래와 같은 단계를 거칩니다.

1. 모든 feature들의 계수와 절편을 0으로 초기화 합니다.

2. 각 속성들의 값에 계수를 곱해 log-odds를 구합니다.

3. log-odds를 sigmoid 함수에 넣어 0~1사이의 확률을 구합니다.

▶ log-odds란?

log-odds를 구하기 전에 먼저 odds를 구해야 합니다. odds는 아래와 같은식으로 구할 수 있습니다.

$Odds\ =\ \frac{사건이\ 발생할\ 확률}{사건이\ 발생하지\ 않을\ 확률}$Odds = 사건이 발생할 확률사건이 발생하지 않을 확률​​

만약 0.7의 확률로 시험에 합격한다면, 시험에 떨어질 확률은 0.3으로 계산할 수 있고 이때의 odds는

0.7 / 0.3 = 2.33으로 계산할 수 있습니다. 이렇게 계산한 값에 log를 씌운것이 log-odds입니다.

로지스틱 회귀에서는 여러 feature들에 계수를 곱하고 그 값에 절편까지 더해 최종 log-odds를 구해야하기 때문에 까다롭습니다. 그래서 dot product를 이용해 log-odds를 구합니다.

각 feature들이 포함된 행렬과 그 속성들 각각의 계수가 포함된 행렬을 위와 같이 계산할 수 있습니다.

▶ 예시로 살펴보기

선형회귀에서와 마찬가지로 로지스틱 회귀도 예시를 통해 좀 더 자세히 설명하겠습니다. 선형회귀에서와 비슷하게 시험 점수를 이용해 합격, 불합격을 판단하는 데이터를 이용하겠습니다. 왼쪽은 이 데이터를 표로 나타낸것, 오른쪽은 좌표평면에 나타낸것입니다.

그래프는 s자의 형태로 그려집니다. 직선으로 표현될 경우 보통 분류작업이 제대로 동작하지 않습니다. 이 문제를 풀기위해 모델의 최종 예측값이 0.5보다 작으면 0으로 예측(불합격), 0.5보다 크면 1로 예측(합격)했다고 판단하겠습니다. 만약 y=wx+b의 형태의 직선을 사용했다면 y값이 음의 무한대 ~ 양의 무한대 값을 가지기 때문에 분류 문제에 적합하지 않은 것입니다.

이때 이용하는 것이 출력이 0-1사이를 가지면서 s자 형태로 그려지는 sigmoid(시그모이드) 함수가 있습니다. 로지스틱 회귀를 풀기위해 가설을 세워보겠습니다. sigmoid함수는 σ로 표현하겠습니다.

구해야 하는 것은 이전과 동일하게 weight인 w와 bias인 b입니다. w와 b에 따라서 출력값이 어떻게 달라지는지 그래프를 통해 알아보겠습니다.

왼쪽 그래프는 w값의 변화에 따른 출력값의 변화입니다. 빨간선은 w=0.5일때, 초록선은 w=1, 파란선은 w=2일때를 나타냅니다. w 값에 변화에 따라 그래프의 경사도가 변하는 것을 알 수 있습니다. w가 커지면 경사도가 커지고 작아지면 경사가 작아집니다. 오른쪽 그래프는 b의 값에 따른 변화입니다. b값에 따라 그래프가 이동하는 것을 알 수 있습니다.

시그모이드 함수는 입력이 커지면 1에 수렴하고, 작아지면 0에 수렴합니다. 0부터의 1까지의 값을 가지는데 출력값이 0.5 이상이면 1(True), 0.5이하면 0(False)로 만들면 이진 분류 문제를 풀기 위해서 사용하는데 적합함을 알 수 있습니다.

▶ 로그 손실(Log Loss)

로지스틱 회귀가 확률을 제대로 예측했는지, 즉 계수와 절편을 적절히 예측했는지 확인하기 위한 손실함수가 필요합니다.

선형회귀와 다르게 로지스틱 회귀에서는 손실함수로 평균제곱오차(MSE)를 사용하지 않습니다. 평균 제곱 오차를 로지스틱 회귀의 손실 함수로 사용했을 때는 local minima에 빠질 가능성이 지나치게 높아 문제 해결이 어렵습니다. 경사 하강법을 사용하였을때 실제 모델이 찾아야 하는 최소값이 아닌 잘못된 최소값에 빠질 가능성이 매우 높기 때문입니다. local minima에 쉽게 빠지는 손실함수는 손실이 가능한 최소가 되는 w를 찾기 위한 목적에는 좋지 않은 선택입니다.

그래서 로지스틱 회귀에서는 새로운 손실함수가 필요합니다. 앞서 설명했듯이 시그모이드 함수는 0과 1사이의 값을 반환합니다. 실제값이 0일 때 예측값이 1에 가까워지면 오차가 커지고, 실제 값이 1일때 에측값이 0에 가까워지면 오차가 커지도록 구현되어야합니다. 이를 나타낼 수 있는게 log함수입니다. 아래 식에서 H(x)는 예측값을 의미합니다.

파란선은 실제값이 1일때, 빨간선은 실제값이 0일때를 나타낸것입니다. 위의 그래프를 간략히 설명하면 실제값이 1일 때, 예측값인 H(x)의 값이 1이면 오차가 0이므로 당연히 손실은 0이 됩니다. 반면, 실제값이 1일 때, H(x)가 0으로 수렴하면 손실은 무한대로 발산합니다. 실제값이 0인 경우는 그 반대가 될것입니다. 이를 식으로 나타내면 아래와 같습니다.

위식에서 y가 0이면 ylogH(x)가 없어지고, y가 1이면 (1-y)log(1-H(x))가 없어집니다. 로지스틱 회귀에서 찾아낸 이 손실함수를 우리가 잘 알고있는 크로스 엔트로피 함수(cross entropy)라고 합니다.

지금까지 이진분류에 해당하는 로지스틱 회귀에 대해 설명했습니다. 클래스가 2개보다 훨씬 많은 경우에 해당하는 분류를 소프트맥스 회귀(softmax regression)라고합니다. 이 링크를 통해 공부하면 좋을 것 같습니다!

728x90
반응형

댓글