머신 러닝은 지도 학습과 비지도학습으로 나뉘는데, 지도 학습은 '회귀'와 '분류'로 나뉜다.
- 지도 학습
- 회귀: 연속적인 값을 예측
- 분류: 정해진 몇 개의 값 중에 예측
- ex. 어떤 이메일이 스팸인지 아닌지, 아니면 어떤 기사가 스포츠 기사인지 정치 기사인지 연예 기사인지 등
보통 분류 문제를 풀 때는, 각 결괏값에 어떤 숫자 값을 지정해 준다.
예를 들어서 이메일이 스팸인지 아닌지 분류한다면, 보통 이메일에는 0이라는 값을 주고 스팸 이메일에는 1이라는 값을 주는 것이다. 이메일의 속성들을 가설 함수에 넣어서 0이 나오면 보통 이메일이고 1이 나오면 스팸 이메일이라고 할 수 있다.
만약 어떤 기사가 스포츠 기사인지 정치 기사인지 연예 기사인지 분류하고 싶다면, 이번에는 가능한 결과가 3가지죠? 그러면 각각 0, 1, 2라는 값을 주면 된다.
선형 회귀를 이용한 분류
예를 들어서 공부한 시간을 갖고 시험을 통과할지 예측한다고 해보자.
통과 하지 못하는 걸 0, 통과하는 걸 1이라고 표시해보면 데이터를 아래와 같은 식으로 나타낼 수 있다. 선형 회귀를 하면 이 데이터를 가장 잘 나타내는 최적선을 구할 수 있을테니까 이를 이용해 분류를 하는건 어렵지 않다.
0.5를 넘는 건 통과로 분류하고 0.5가 안 되는 건 통과하지 못한 걸로 분류하면 된다.
위의 그래프에서는 100시간이 딱 0.5가 되는 지점이니까, 100시간 넘게 공부한 사람은 통과로 분류하고, 100시간 밑으로 공부한 사람은 통과 못한 걸로 분류하면 된다.
그런데 분류 문제를 풀 때 선형 회귀를 잘 사용하지 않는다. 그 이유는 아래와 같다.
여기에다가 데이터 하나를 추가했을 때 이 새로운 데이터는 1000시간을 공부한 친구다. 1000시간을 공부한 친구는 혼자 저 멀리 떨어져 있는데, 이 데이터 하나로 인해서 최적선이 이렇게 좀 눕혀지게 됩니다.
그러면 이제는 200시간이 아웃풋 0.5가 되는 지점이다.
갑자기 200시간을 넘게 공부한 사람들만 통과로 분류하게 되는 것이다. 이렇게 고작 데이터 하나 추가됐다고 하여 100시간에서 200시간으로 통과 기준이 확 바뀌어 버린 것이다.
선형 회귀는 이런 예외적인 데이터에 너무 민감하게 반응하기 때문에, 보통 데이터를 분류하고 싶을 때는 잘 사용하지 않는다.
그래서 분류를 할 때는 보통 선형 회귀 대신 '로지스틱 회귀', 영어로는 'Logistic Regression'이란 걸 사용한다.
로지스틱 회귀(Logistic Regression)
로지스틱 회귀는 선형 회귀랑 어떻게 다를까?
데이터가 있으면 선형 회귀는 이 데이터에 가장 잘 맞는 일차 함수를 찾는 것이지만,
로지스틱 회귀는 데이터에 가장 잘 맞는 일차 함수가 아니라, 데이터에 가장 잘 맞는 시그모이드 함수를 찾는 것이다.
시그모이드 함수
시그모이드 함수 식은 아래와 같이 생겼다.
그래프에 그리면 이렇게 생긴 곡선이다.
시그모이드 함수의 가장 중요한 특징은, 무조건 0과 1 사이의 결과를 낸다는 것이다.
$x$ 가 엄청 커서 무한대라고 해보자. 시그모이드 식에서 $x$에 무한대를 대입하면, $e$의 마이너스 무한대 제곱이 된다.
(e는 2.718이라는 양수다) 2.718의 마이너스 무한대 제곱이면 0이 나오게 된다.
그러면 분모가 1 + 0이니까 그냥 1이 돼서, 이 함수의 결괏값은 1분의 1... 그냥 1이 된다.
반대로 $x$가 엄청 작아서 마이너스 무한대라고 해보자.
$x$에 마이너스 무한대를 대입하면, 이 부분은 2.718의 무한대 제곱이므로 무한대가 된다. 그러면 분모는 1 + 무한대인데, 1 + 무한대 역시 그냥 무한대다. 함수의 결괏값은 무한대분의 1이 되는데, 무한대분의 1은 그냥 0이다.
결과적으로 $x$가 엄청나게 작으면 0에 가까워지고,
$x$가 엄청나게 크면 1에 가까워진다. 그래서 시그모이드 함수는 항상 0과 1 사이의 결과를 내게 된다.
결과가 0과 1 사이라는 게 어떤 의미일까?
선형 회귀에서 쓰는 가설 함수는 일차 함수인데, 일차 함수는 결과가 얼마든지 작아질 수 있고 또 얼마든지 커질 수도 있기 때문에 분류를 하기에 약간 부적합하다. 반면 시그모이드 함수의 결과는 항상 0과 1 사이에 떨어지기 때문에 분류를 할 때 더 유용하게 쓸 수 있다.
선형 회귀는 예외적인 데이터 하나에 가설 함수가 너무 민감하게 반응한다. 그런데 시그모이드 함수는 그 문제를 해결해 준다. 시그모이드 함수는 아래처럼 생겼기 때문에, 많이 동떨어진 데이터 하나가 있어도 크게 영향을 받지 않는 것이다.
로지스틱 '회귀'라는 이름에 대한 오해
그런데
로지스틱 회귀는 회귀가 아니라 분류를 하기 위해 쓰이는데, 왜 이름이 로지스틱 회귀일까?
사실 따지고 보면 시그모이드 함수의 결괏값도 결국은 0과 1 사이의 연속적인 값이기 때문에, 회귀라고 볼 수 있다. 그래서 '로지스틱 분류'가 아니라 '로지스틱 회귀'라고 부르는 것이다. 우리는 주로 시그모이드 함수의 결괏값이 0.5보다 큰지 작은지 보고 결국 분류를 한다. 그러니까 이름은 로지스틱 회귀지만 사용하는 건 주로 분류다.
가설 함수
로지스틱 회귀에서 사용할 가설 함수를 알아보자.
가설 함수는 특정 데이터에 대해서 입력 변수를 받으면 목표 변수를 예측해 주는 함수다. 선형 회귀에서는 가설 함수가 아래처럼 생겼다.
그리고 벡터를 사용하면,
더 간결하게 표현할 수 있으므로 두 번째 방식을 주로 사용하자.
선형 회귀에서 썼던 이 가설 함수를 조금 발전시키면 로지스틱 회귀의 가설 함수가 나오는데,
로지스틱 회귀의 가설 함수도 $h$라고 해야하므로 이건 $g$라고 하자.
그러면 로지스틱 회귀의 가설 함수는 아래 좌측처럼 쓸 수 있다. 여기서 함수 $g$를 대입하면 우측처럼 쓸 수 있다.
자, 그런데 지금 함수 $h$ 안에 함수 $g$를 쓰고 있으니까, 조금 헷갈린다.
함수 $g$는 일차 함수인데, 일차 함수는 아웃풋이 엄청 클 수도 있고, 엄청 작을 수도 있다.
예를 들어 일차 함수가 직선이라면, 인풋이 엄청 커지거나 엄청 작아지면 결국 아웃풋도 엄청 커지거나 엄청 작아질 수 있다.
그런데 로지스틱 회귀를 할 때 아웃풋이 항상 0과 1 사이에 떨어지도록 하고 싶다.
그러기 위해서는 아래처럼 생긴 '시그모이드 함수'라는 걸 쓰면 된다.
이 시그모이드가 하는 역할이 어떤 인풋을 넣든 간에, 아웃풋은 무조건 0과 1 사이에 떨어지게 하는 것이다.
선형 회귀에서 썼던 가설 함수인 $g$의 아웃풋을, 이 시그모이드 함수의 인풋으로 집어 넣으면, 결국 0과 1 사이의 결과가 나온다.
참고로 0이나 1이 나오는 게 아니라, 0과 1 사이의 어떤 수가 나오는 것이다.
가설 함수의 아웃풋
그렇다면 0 과 1 사이의 수로 뭘 하는 걸까?
이 가설 함수가 하는 일이, 공부한 시간을 바탕으로 시험을 통과할지 예측하는 거라고 해보자.
0은 통과 못하는 걸 의미하고, 1은 통과하는 걸 의미한다.
그리고
는 이런 벡터라고 하자. 여기서 $x_0$은 항상 1이니까 그냥 무시하시면 되고,
$x_1$이 50이라는 건 학생이 50시간 공부했다는 걸 의미한다.
$x$를 가설 함수에 넣었더니, 0.9가 나왔다고 해보자. 0.9가 아웃풋으로 나왔다는 건 무슨 의미일까?
이건 목표 변수가 1일 확률이 0.9, 즉 90%라는 의미다.
그러니까 50시간을 공부한 학생이 시험을 통과했을 확률은 90%라는 것이다. 확률이 50%가 넘으니까, 분류를 하자면 이 학생은 통과한 학생으로 분류하면 된다. 만약 아웃풋이 0.4라면 통과할 확률이 40%라는 거니까, 통과하지 못한 걸로 분류하면 된다.
단순화한 시각화
아래의 로지스틱 회귀의 가설 함수를 시각적으로 표현해보자.
이렇게 표현할 수 있는데, 선형 회귀와 똑같이 여기서 최적의 $θ$값들을 찾아내는 것이다.
이해를 돕기 위해,
단순화해서 입력 변수가 하나라고 생각해보자.
우리가 하려는 건 이런 식으로 주어진 데이터에 가장 잘 맞는 시그모이드 모양의 곡선을 찾아내는 것이다.
근데 이 곡선은 $θ$ 값들을 조절해서 찾는 것이다.
변수가 하나라는 건 $θ$ 값이 $θ_0$, $θ_1$ 이렇게 두 개가 있다는 뜻이다.
이때 가설 함수는 아래처럼 표현된다.
$θ_0$의 값을 늘리면 곡선이 왼쪽 움직이고, 줄이면 오른쪽으로 움직인다.
$θ_1$의 값을 늘리면 S 모양의 곡선이 조여지고, 줄이면 늘어지고 아래처럼 된다.
선형 회귀와 똑같이 이렇게 $θ_0$과 $θ_1$의 값들을 바꿔가면서 갖고 있는 학습 데이터에 가장 잘 맞는 시그모이드 모양의 곡선을 찾아내는 게 로지스틱 회귀의 목적인 것이다.
속성이 하나일 때
예를 들어서 공부 시간으로 시험을 통과/탈락 했는지 예측한다고 하자.
그럼 속성이 하나이므로 아래처럼 가설 함수가 세워진다.
이렇게 $x$에 100시간을 넣어서 0.9가 나오면 100시간 공부한 학생이 시험을 통과할 확률은 90%인 것이고, $x$에 40시간을 넣어서 0.4가 나오면 40시간 공부한 학생이 시험을 통과할 확률은 40%로 해석할 수 있다.
그렇기 때문에 가설 함수의 아웃풋이 0.5인 공부 시간을 알아내면:
이렇게 47시간 이상 공부한 모든 학생은 통과, 47시간 미만 공부한 모든 학생은 탈락으로 예측하게 된다.
그렇다면 47시간에 선을 긋고
모든 데이터에 대해서 파란색 영역에 있으면 '통과', 빨간색 영역에 있으면 '탈락' 이라고 할 수 있을 것이다.
이렇게 분류할 때는 분류를 구별하는 경계선을 Decision Boundary라고 부른다.
속성이 두 개일 때
속성이 2개일 때 로지스틱 회귀 가설 함수를 시각화 하는 것은 쉽지 않지만, Decision Boundary를 시각화하는 것은 쉽다.
이번에는 공부 시간, 그리고 모의고사 시험 점수를 토대로 시험을 통과했는지를 예측한다고 해보자.
공부 시간을 $x1$, 모의고사 시험 점수를 $x2$라고 했을 때, 아래와 같은 가설함수를 만들 수 있다.
그리고 이 함수의 결과가 0.5 이상이면 시험을 통과, 미만이면 탈락을 예측할 수 있는데,
변수가 하나일 때 47 시간에 선을 그릴 수 있던 것처럼, 위의 내용을 시각화하면 아래와 같은 선을 그릴 수 있다.
$hθ(x)=11+e−(θ0+θ1x1+θ2x2)=0.5hθ(x)=1+e−(θ0+θ1x1+θ2x2)1=0.5$ 이 식을 풀면 변수 $x_1$과 $x_2$의 관계식을 구할 수 있다. (예를 들어 $x2=−2x1+100x2=−2x1+100$) 바로 이 함수가 데이터를 분류하는 기준선이 된다(주황색 선).
이 선 위에 있는 데이터는 통과 예측, 그리고 밑에 있는 데이터는 탈락을 예측할 수 있다.
이때 Decision Boundary를 시각화하면 아래와 같다.
정리하자면, Decision Boundary는 용어 그대로 데이터를 분류하는 '결정 경계선'을 의미한다.
로지스틱 회귀에서만 사용하는 용어는 아니고, 분류를 하는 모든 문제들에 적용할 수 있는 개념이다.
Decision Boundary도 다른 개념들과 비슷하게 변수가 많아질 수록 시각적으로 표현하기 힘들어진다.
그러나 다양한 분류 알고리즘의 개념에 대해 배울 때 문제를 간단하게 만들어 이해할 때 도움이 된다. 추후 시각적으로 데이터를 나누는 경계선, 또는 영역을 그릴 때 사용하면 유용하다.