가볍게 읽어보는 머신러닝 개념 및 원리 - (2) 지도학습 알고리즘(회귀분석, 의사결정나무, SVM)

2018. 7. 28. 20:24IT, 데이터/Data Science(데이터 분석)

728x90





지난 글에서는 머신러닝의 의미와 작동하는 방법에 따라 지도학습과 비지도학습으로 분류할 수 있다고 하였습니다.


이번 글에서는 데이터의 형태에 따라 지도학습의 역할이 어떻게 달라지는 지 먼저 살펴보고, 그 다음 지도학습에 해당하는 머신러닝 알고리즘에 대해 소개하도록 하겠습니다.




1. 지도학습의 역할 - 분류 vs 회귀



지도학습에서는 레이블링된 훈련 데이터를 학습하여 모델을 만들고, 레이블링 되지않은 테스트 데이터를 모델에 적용하여 입력된 데이터에 대해서 맞는 답을 찾는다고 앞서 설명하였습니다. 


이 때 레이블링된 답이 어떤 형태인지에 따라 모델은 분류 또는 회귀의 방법으로 답을 예측합니다.



먼저 이전 글에서 언급한 개와 고양이 사진 구분의 예시의 경우에는 레이블링된 값(출력값)이 딱딱 떨어지게 서로 구분되는 경우입니다. 이렇게 데이터의 값이 A냐 B냐, C냐 이런 식으로 서로 완전히 구분되면 이것을 범주형 데이터라고 하며, 이렇게 레이블링된 값(출력값)이 범주형 데이터인 경우 학습한 모델은 각각의 값을 구별해 내는 '분류(Classification)'의 역할을 수행합니다.



한편 가계소득과 지출에 관한 관계를 알아보고자 가구의 소득 데이터 별로 가계지출 값이 레이블링된 데이터를 학습시킬 수도 있습니다. 이 때 가계지출은 개, 고양이 같이 딱딱 떨어지는 값이 아니라 임의의 숫자입니다. 이렇게 값들이 어떠한 범위 내에서 자유롭게 수치형태로 존재할 수 있는 데이터를 연속형 데이터라고 하며, 레이블링된 값(출력값)이 연속형 데이터인 경우 학습한 모델은 입력값(가계소득)과 출력값(가계지출) 간의 일반적인 관계 특성을 도출하는 '회귀(Regression)'의 역할을 수행합니다.





위의 예시에서 왼쪽은 모델이 분류를 수행한 것이고 오른쪽은 회귀를 수행한 것입니다. 


분류의 경우 찾아야 할 답(출력값)이 □와 X표로 명확하게 구분이 되어있습니다. 이런 경우 학습을 통해 빨간색 선 모양으로 두 값을 구분하는 모델을 만들게 됩니다. 따라서 앞으로 입력될 테스트 데이터가 선 왼편에 있을 경우 □로 분류해내고, 오른쪽에 있다면 X표로 분류하게 됩니다.


회귀의 경우 출력값이 연속형이라 특정한 종류가 아니라 임의의 값을 갖고 좌표 위에 자유롭게 분포해 있습니다. 하지만 이 값들은 완전 무작위가 아니라 어떠한 경향을 가지면서 분포한다는 것을 눈으로 봐도 대략적으로 알 수 있는데, 머신러닝을 통해 이 데이터를 학습시키면 점들이 사인곡선(초록색 선) 형태로 분포해 있다는 일반적인 특성을 도출해낼 수 있습니다. 따라서 이 모델을 통해 테스트 데이터를 집어넣으면 입력값의 수치에 따라 이 사인곡선(초록색 선) 위의 한 점에 해당하는 값을 출력하게 됩니다.




2. 회귀 분석(선형 회귀(Linear Regression), 로지스틱 회귀(Logistic Regression))


선형 회귀와 로지스틱 회귀는 비교적 간단하면서도 현재에도 데이터 분석이나 연구에 많이 활용되고 있는 알고리즘입니다. 먼저 선형 회귀의 아이디어는 꽤 직관적인데 아래 그림과 같이 임의로 분포한 데이터들을 하나의 직선으로 일반화시키는 것입니다. 


많은 자연현상이나 사회현상이 어떠한 요인에 대해 1차 함수 형태로 정비례하는 경우가 많다는 것을 예전 시대의 사람들도 경험적으로 이해하고 있었기 때문에, 지금까지 모아온 데이터들을 통해 두 변수 사이의 관계를 하나의 함수로 일반화하여 미래에 발생할 값을 예측하고자 개발되었습니다.


무려 1800년대까지 거슬러 올라가는 유서깊은 데이터 분석의 원조 격이라고 할 수 있는 방법으로, 영국의 인류학자인 프랜시스 골턴(Francis Galton)이 부모와 자식간의 키 관계를 연구한 사례가 역사적으로 널리 알려져 있으며, 그 경향이 극단적으로 튀는 방향이 아니라 평균적인 수치로 '회귀'한다는 데서 회귀분석이라는 용어가 탄생하게 되었습니다.


[그림출처 : https://ko.wikipedia.org/wiki/회귀_분석]


이렇게 회귀분석을 데이터의 경향성을 잘 보여주는 직선을 긋는 알고리즘이며, 이 때 아무렇게나 선을 긋는 것이 아니라 최대한 데이터가 선으로 부터 벗어나지 않도록 그어야 좀 더 정확한 경향성을 나타낼 수 있을 것입니다. 따라서 각 데이터 별 값과 직선까지의 거리 분산을 최소화 하도록 직선의 모양을 결정합니다. 이것을 최소제곱법(OLS : Ordinary Least Square)이라고 부르며, 선형 회귀는 최소제곱법을 이용해서 회귀식(직선을 나타내는 1차 함수)을 만드는 것이라고 할 수 있습니다.



프랜시스 골턴의 사례와 비슷한 예시를 들어보면 어떤 연구자가 어린이들이 키가 자라는데 관계되는 요인들이 어떻게 영향을 미치는지 조사하고자 회귀분석을 활용하기로 하고, 아동별로 하루에 음식을 섭취하는 칼로리, 하루에 평균 운동시간, 유전적 요인인 아버지와 어머니의 키 데이터를 확보하였습니다. 그러면 선형 회귀를 통해 다음과 같은 관계식을 얻게 되는 것입니다.



  아동의 키 = (0.2 x 칼로리) + (0.1 x 운동시간) + (0.4 x 아버지 키) + (0.4 x 어머니 키) + 0



이렇게 회귀식을 통해 입력되는 값에 따라 최종적인 아동의 키를 예측할 수 있게 되는 것입니다. 위의 식에 따르면 아동의 키에 영향을 주는 입력값 별 가중치가 부모님의 키가 0.4로 유전적인 영향이 가장 강한 것으로 추론할 수 있고 영양상태와 운동시간는 가중치가 각각 0.2, 0.1로 둘 중에는 영양상태가 좀 더 키에 영향이 있다는 것을 시사해줍니다.


이렇게 회귀식은 우리가 이해하기 쉬운 형태로 도출되기 때문에 입력값과 출력값과의 관계를 쉽게 파악할 수 있다는 큰 장점이 있습니다. 


하지만 회귀식을 통해 도출되는 아동의 키(출력값)는 실제와는 완전히 똑같을 수는 없고 약간의 차이가 발생하게 되는데, 회귀분석으로 만들어진 모델(회귀식, 1차함수)이 학습한 데이터와 차이가 작을수록 더 정확한 모델이 되고 그렇지 않은 경우 오차가 커지게 됩니다. 


또한 선형 회귀는 1차 함수 형태로 나타나기 때문에 출력값이 연속형일 경우에만 적용할 수 있고, 개와 고양이 같이 범주형 데이터에는 적용할 수 없습니다. 그리고 데이터가 1차함수의 형태로 분포해 있지 않으면(2차 함수, 로그 함수 등) 정확성이 떨어집니다. 회귀 분석은 역사가 오래된 만큼 다양한 응용 기법이 있어서 1차 함수 형태로 분포해 있지 않아도 데이터 변환을 통해 직선 형태로 바꿔서 적용할 수 있긴 합니다.  



그 응용기법 중 하나로 로지스틱 회귀(Logistic Regression)이 있는데, 출력값이 범주형 데이터일 경우 사용할 수 있는 방법입니다.



로지스틱 회귀는 로지스틱 함수를 회귀식으로 사용하기 때문에 붙여진 명칭으로, 로지스틱 함수는 오른쪽 위의 빨간색 선과 같이 최소값과 최대값이 특정한 값으로 수렴하고 그 사이는 S자 커브 모양으로 굴곡이 진 모양의 함수를 말합니다. 최소값과 최대값이 수렴하기 때문에 범주형으로 완전히 분리된 값을 구분하기 좋다는 특징이 있습니다.



위의 그림과 같이 출력값이 0과 1로 완전히 분리된 데이터의 경우, 선형 회귀를 하면 파란색 선과 같이 부정확하게 나타나지만, 로지스틱 회귀를 사용할 경우 빨간색 선과 같이 0과 1로 명확하게 구분하는 것을 볼 수 있습니다.



이렇게 회귀분석으로 학습한 모델은 데이터를 분류하거나 일반화하는 데 하나의 선을 활용한다고 이해하시면 되겠습니다.















3. 의사결정나무(Decision Tree)


의사결정나무는 주어진 입력값에 대해서 여러 번의 질문을 통해 답을 찾는 방법입니다.

흡사 스무고개 놀이하는 것과 같다고 볼 수 있습니다. 




아키네이터(Akinator)라는 본인이 생각하는 인물이나 캐릭터에 대해 여러 번 질문을 해서 제가 생각한 것을 알아맞히는 한 번 심심풀이로 해볼만한 사이트가 있는데요.


https://kr.akinator.com/game



사람이 아니라도 답을 맞힐 수 있도록 컴퓨터에 인물에 대한 신상정보를 넣어주면 위 사이트같이 누구든 알아맞히는 재미진 능력을 보여줍니다.



예를 들어 제가 미국 도널드 트럼프 대통령을 생각했는데요, 아래와 같이 질문을 해서 대답을 했습니다. 



    

    

    



처음에는 남자입니까, 한국사람입니까, 실존인물입니까와 같이 막연한 질문을 하다가, 어느 순간 미국사람입니까, 대통령에 출마하였습니까로 범위가 확 좁아지고, 마지막에 은퇴했습니까 질문에서 제가 생각한 사람이 드러났군요.




의사결정나무도 위와같은 방법으로 답을 분류하며, 여러가지 질문의 경우에 따라 가지치기 하듯이 뻗어나간다는 모양이 나무와 같다고 하여 이렇게 용어가 붙여졌습니다.



다음의 예시로 좀 더 자세히 설명하겠습니다.



[그림출처 : https://towardsdatascience.com/decision-tree-hugging-b8851f853486]



만약 입사 제의가 들어온 회사의 조건에 따라 입사할 지 말지를 결정하고자 하는 모델을 만들고자 합니다. 이 때 이전에 입사 제의를 받았던 회사들의 조건과 그에 대한 입사 수용, 거절 여부 이력(훈련 데이터)들을 모아서 학습시킨 결과


연봉이 $50,000 이상이고, 통근시간이 1시간 미만이고, 커피를 무료로 자유롭게 마실 수 있는 곳은 입사를 수용하고 그렇지 않은 경우는 모두 입사를 거절한다는 모델을 만들었습니다.


따라서 이 모델에 의해 위의 질문을 거쳐 나에게 맞는 회사의 조건에 따라 입사를 수용하거나 거절을 결정할 수 있게 되는 것입니다.



이제 이 모델에 새로 입사 제의가 들어온 회사에 대한 정보를 넣어보겠습니다. 만약 위 조건을 모두 만족하는 회사라면 입사수용으로 결정되지만, 다른 조건이 모두 만족하더라도 커피머신이 없는 회사라면 입사 거절로 답이 나오게 되겠습니다. 







이러한 의사결정과정을 좀 더 컴퓨터 관점에 보면, 각각의 질문은 위의 그림 상에 보이는 검은색 선이라고 할 수 있습니다. 


맨 왼쪽 그림에서 수평으로 선이 그어졌는데 어떠한 기준에 따라 데이터를 두 개로 구분하고 그 중 위의 것은 노란색이라고 분류한 것입니다. 하지만 아직 아래쪽은 초록색과 보라색, 파란색이 구분된 상태가 아닙니다. 따라서 몇 번의 질문을 더 해야(선을 더 그어야) 좀 더 정확하게 분류할 수 있게 됩니다. 이렇게 중앙에 있는 그림과 같이 몇 번의 선을 더 긋는 과정을 통해 이제 각 출력값을 비교적 정확하게 구별해 낼 수 있게 되었습니다


이렇게 의사결정나무는 데이터를 구분하는 확실한 기준을 갖고 분류하기 때문에 회귀 모델처럼 의사결정나무 모델도 사람이 이해하기 쉽습니다. 그리고 하나의 선만 활용하는 회귀 모델과는 다르게 여러개의 선을 가지고 분류하기 때문에 회귀 모델을 적용하기 어려운 복잡한 형태로 분포한 데이터들도 의사결정나무는 잘 구분할 수 있습니다. 



그렇다면 아무리 복잡한 데이터라도 선을 계속해서 긋다보면 결과적으로 모든 데이터를 100% 정확하게 분류할 수 있는 것이 아닐까 생각할 수 있습니다. 위의 Akinator와 같이 말이죠. 



하지만 위의 오른쪽 그림과 같이 지나치게 촘촘하게 분류할 경우 훈련시킨 데이터에 한정해서는 매우 높은 정확도를 보일 수 있지만, 실제 분류를 수행해야 할 테스트 데이터는 훈련데이터와 완전히 같은 형태로 값들이 분포한다는 보장이 없으므로 이렇게 훈련 데이터에 특성화시킨 복잡한 모델이 오히려 정확도가 떨어지게 됩니다. 또 너무 복잡하기 때문에 이해하기 어렵고 성능도 떨어지게 되고요.


이러한 현상을 과대적합(Over fitting)이라고 하며, 의사결정나무에서는 지나치게 복잡한 가지들을 쳐내는 가지치기(Pruning) 작업을 통해 적절한 수준으로 의사결정나무를 만드는 방법으로 모델을 만들어나가게 됩니다. 



[그림출처 : https://tensorflow.blog/파이썬-머신러닝/2-2-일반화-과대적합-과소적합]



결론적으로 회귀분석은 하나의 선으로 데이터를 분류하거나 일반화한다면, 의사결정나무는 여러 개의 직선을 활용한다고 볼 수 있습니다.




4. 서포트 벡터 머신(Support Vector Machine, SVM)




[그림출처 : https://en.wikipedia.org/wiki/Support_vector_machine]



서포트 벡터 머신의 주요 아이디어는 출력값들을 구분할 수 있는 가장 평면(선)을 긋되 가장 큰 폭으로 차이가 나도록 긋는 것입니다. 이 경계는 초평면(Hyperplane)이라고 부르는데, 그냥 평면도 아니고 초평면인 이유는 입력값이 두 개인 경우에는 아래 왼쪽 그림과 같이 2차원 평면에 선으로 그릴 수 있지만, 입력값이 그 이상일 경우 4차원 이상이 되기 때문에 개념적으로만 상상할 수 있기 때문입니다.



어쨌든 서포트 벡터 머신은 데이터가 어떻게 분포해 있든 간에 직선이나 곡선을 그어서 분류할 수 있기 때문에 회귀 모델이나 의사결정나무 모델이 학습하기 어려운 복잡한 데이터도 학습할 수 있는 장점이 있습니다.


       

오른쪽 위의 그림을 보면 데이터가 직선으로 구분할 수 없는 형태로 되어있는데, 서포트 벡터 머신은 커널 함수라는 변환 함수를 통해 직선형태로 변형하여 구분합니다.



결론적으로 서포트 벡터 머신은 데이터를 분류할 때 정형화된 직선이 아니라 이제부터는 복잡한 곡선을 동원할 수 있다는 사실을 아시면 되겠습니다. 이것은 중요한 것을 시사하는데 저렇게 임의의 곡선을 수식으로 나타내려면 엄청나게 복잡한 함수들이 동원되기 때문에 회귀 모델이나 의사결정나무 모델과는 다르게 모델을 더 이상 사람이 수식이나 도식을 보고 이해하거나 해석할 수 없습니다.



단지 컴퓨터만 이해할 수 있는 분류 방법대로 테스트 데이터가 정확하게 분류되어 나오면 사람은 그 결과를 그냥 받아들일 수만 있을 뿐이고, 왜 컴퓨터가 이렇게 생각했는 지는 우리가 뭔가 말로 논리정연하게 설명할 수 없는 것입니다. 이것은 더 복잡한 모델인 신경망 알고리즘에서도 그대로 적용되는 이야기입니다.




이렇게 데이터를 분류하거나 일반화하는 가장 단순한 방법부터 복잡한 방법(컴퓨터의 관점에서) 순서로 지도학습 별 알고리즘을 소개하였으며, 다음 글에서는 지도학습 알고리즘 중 가장 핫하고 가장 성능이 좋은 신경망에 대해서 이야기하도록 하겠습니다.


 



[제목 그림출처 : https://www.ie.edu/exponential-learning/blog/bootcamps/machine-learning-marketing/]