본문 바로가기

AI/Machine Learning

[ML] 분류(Classification)와 회귀(Regression)

* 기본 개념부터 다시 생각하는 기계학습

분류(Classification)와 회귀(Regression)는 지도학습(Supervised Learning)의 목적이라 할 수 있다.

 - 지도학습 : 입력과 출력 데이터(훈련 데이터)가 있고 이를 모델화하여 새로운 데이터에 대해 정확한 출력을 예측하는 것


분류와 회귀는 어떻게 다른가

분류 (Classification)

분류는 class를 예측하는 것이다.

무려 5년전 성의없이 포스팅한 

[NLP] 언어 분류 : Language-detection : http://nexablue.tistory.com/entry/언어-분류-Languagedetection?category=601600

위 글은 분류에 대한 명확한 예제이다. (세부적으로는 다중분류) 어떤 text를 입력했을 때, 그것이 어떤 class에 속하는지 예측하는 것이다.

이제는 hot하다고 말하기에는 너무 큰 흐름이 되어 버린 Deep Learning, 특히 CNN 에서 Tutorial 처럼 언급되는 개/고양이 이미지 예측 문제와 같은 것들이다.

즉, 예측해야할 대상(Class)이 정해져 있다.

이진 분류 (Binary classification)

예측해야 할 class가 두 가지인 경우이다.

내가 받은 메일이 스팸메일이냐 아니냐,

누군가가 나에게 보낸 메세지가 욕설이냐 아니냐와 같이 대답이 예/아니오로 구분될 수 있는 문제들을 주로 포함한다.

두 가지 class는 positive class, negative class로 나눌 수 있으며, 주로 학습하고자 하는 대상(즉, 예측하고자 하는 대상)을 positive class로 부르기도 하지만 주관적인 문제이다.

과거 회사 업무로 욕설 분류기를 개발했는데, 이때 욕설 class가 positive class가 된다. 아이러니하게도....

다중 분류 (Multi-class classification)

예측해야 할 class가 여러 가지인 경우이다.

위에서 언급한 언어 분류 모델 같은 경우, 입력 text가 영어 / 프랑스어 / 독일어 / 이탈리아어 / 스페인어 / 한국어 / 일본어 / 중국어 / 등등 어느 언어인지 분류한다. 

회귀 (Regression)

회귀는 보통 연속적인 숫자, 즉 예측값이 float 형태인 문제들을 해결하는데 사용된다.

예를 들어, 지하철 역과의 거리, 일정 거리안의 관공서, 마트, 학군의 수 등등 여러 feature들로 어떤 지역의 땅값을 예측하는 문제와 같은 것들이다. 이 땅값은 평당 1천만원, 1.1천만원, 2천만원과 같이 특정 수로 결정되기는 하지만, 실제로는 특정 범위의 무한한 실수들 중에서 대푯값을 선택한 것이다.(평당 10,000,001원과 10,000,002원은 큰 차이가 나지않지만 분명 다르다. 이걸 10,000,000원의 대푯값으로 퉁 치는 셈이다.) - 대표값에 대해서는 추후 다시 다루도록 한다.

 어쨌든 실제 1원단위 또는 소수점 단위의 금액이든 대푯값 역시 class가 아니다. 즉 출력에 연속성이 있다. 이 연속성 중에 어디에 점을 찍을 수 있는가를 예측하는 것이 회귀문제이다.


분류와 회귀 구분하기

분류와 회귀를 굳이 포스팅하는 이유는 여기에 있다. 과거의 나는 물론 주변에서 회귀에 대해 잘못 생각하는 경우를 종종 보았다.

분류와 회귀에 대해 명확히 구분하지 못하고 확률이나 통계를 다룰 수 있는 경우 조금 이상한 접근을 하는 경우가 있다.

위에 언급한 text가 욕설인지 아닌지 예측하는 문제를 다시 살펴보자.

"분류"를 이용하여 문제를 해결하고자 하는 경우, 입력에 대해 욕설 class일 확률과 욕설이 아닌 class일 확률을 예측하여 확률이 높은 class로 예측을 하는 것이 정상이다. 이렇게 학습하여 각각의 class에 대한 확률을 계산하려면 욕설 데이터를 수집하고, 욕설이 아닌 데이터를 수집해여 모델링하고 각각의 class에 대한 확률을 예측하는 것이 일반적이다. Deep learning에서 한번쯤 들어봤을 법한 softmax의 역할과 유사하다.(사실 각 class의 score 또는 확률들 중에서 무엇을 선택하는가의 문제이다.)

"분류"가 지도학습 범주에 있는 이유는 학습 데이터가 분류려는 class에 맞도록 이미 labeling이 되어 있기 때문이다.

- 이런 개XXX XX하고 있네 - 욕설

- 댓글 좀 달아주세요 - 정상


그런데..가끔이 문제를 회귀아닌 회귀(?)로 풀려고 접근하는 경우가 있다.

예를 들어 욕설에 대한 데이터만을 수집하고, 입력이 욕설일 확률을 계산하는 문제로 접근하는 경우가 있다.

물론 이렇게도 풀 수 있다. 하지만 이것은 분류나, 회귀의 문제가 아니다.

"회귀아닌 회귀"라는 표현을 사용한 이유는 출력이 확률이므로, 즉 float, 연속성을 가지고 있으므로 이것을 회귀라고 착각하는 경우때문이다.

이것은 학습데이터에서 관측된 feature이들 입력 text에서 발견되면 score를 높여가는(실제로는 확률도 아니다) scoring 방법이다.

이 경우, 최종 score가 일정 범위 안으로 정규화 되기 힘들고

- 입력의 다양성에 의해 최종 score가 얼마인지 알수 없다 : 최대 최소 정규화(min-max normalization)을 할 수 없다.

- 즉, 0~1사이로 정규화 할 수 없다.

그런데 꾸역꾸역 여기에 sigmoid니, relu를 붙여 정규화를 했다치자.(relu, sigmoid의 역할이 아닌데도..)

결국 score가 얼마 이상일 때, 이것을 욕설로 예측한다라는 threshold를 결정해야하는 문제가 남는다. (relu나 sigmoid에게 맡기려해도 최대값을 모르므로 어느정도가 1을 넘는지 알수 없다)

그리고 임의로 0.7점 이상이라면 욕설로 볼 수 있다라는 지극히 주관적이고 정성적인 판단을 한다. 여기에 평가셋을 붙여 90%이상의 정확도라고 말한다. 이렇게 "분류"를 한다고 말한다...

그러다가 학습데이터가 갑자기 늘어났다. 이제 0.7이라는 threshold는 더 이상 사용할 수 없다.

어디서부터 잘못된 것인가. 어디서부터 바로 잡아야 하나..


회귀는 확률을 예측하는 것이 아니다.

회귀는 출력는 연속성이 있고, 그 연속성 중에 어디에 점을 찍을지 결정하는 문제이다.

확률은 사건들의 연속, 독립, 반복 등의 시행(trial) 따라 표본공간(sample space, 일어날 수 있는 모든 경우의 수) 속에서 사건(event)이 발생할 경우의 수를 구하는 문제이다. 


해결해야할 문제를 정확히 인지하고, 어떤 데이터들을 수집하여, 어떻게 정제하야하는지 판단하고, 어떤 방법론(알고리즘)을 사용할지 선택하는 것이 Machine Learning을 하는 사람의 능력이다. 어려운 용어, 수학식을 들먹이며 이것으로 하자, 저것이 나으려나 고민하는 것이 Machine Learning을 하는 사람이 아니다.

(참고로 수집-정제-모델링 방법 선택은 때로는 자기들끼리 뺑뺑이를 돌기도 한다.)


이렇게 하나하나 처음부터 다시 정리해보고자 한다..