상세 컨텐츠

본문 제목

[데이터 마이닝] 지도 학습(Supervised Learning) 기법

그냥 공부

by ∫2tdt=t²+c 2017. 3. 24. 19:14

본문

대량의 구조화된 데이터에서 새로운 사실을 발견해내는 것을 데이터 마이닝(Data Mining)이라고 합니다. 데이터 한 두 개가 있을때에는 보이지 않던 사실이 데이터가 많이 모이게 되면 보이게 된다는 것인데요, 정보 기술의 발달로 축적되는 데이터가 증가하면서 데이터 마이닝에 대한 관심도 크게 증가했습니다. 사실 거창하게 이야기했지만 데이터 마이닝의 주 목적은 패턴 발견입니다. 우리가 점 하나를 가지고는 그 점이 가지는 의미르 알 수 없지만, 무수히 많은 점이 모이게 되면 전체적인 경향을 볼 수가 있잖아요. 데이터 마이닝도 마찬가지입니다.


데이터가 적을때에는 보이지 않던 패턴이 그 양이 늘어나면 보이게 됩니다.


그래서 사실 데이터 마이닝은 통계적 기법을 많이 활용합니다. 통계의 역할이 많은 양의 관측 데이터를 잘 정리해서 보여주고, 미래를 예측하는 것이기 때문이죠.


구조화된 데이터

데이터 마이닝은 구조화된 데이터(Structured Data)에만 사용가능합니다. 즉 블로그 글이나 페북 메세지처럼 제멋대로인 텍스트 데이터에는 데이터 마이닝의 기법을 적용할 수 없어요. 이런 비정형 텍스트 데이터를 다루는 것은 텍스트 마이닝에서 합니다. 구조화된 데이터는 쉽게 말해서 표형태로 나타낼수 있는 (즉 관계형 데이터베이스로 표현되는) 데이터라고 보면 됩니다.


이름 성별 몸무게 수학 성적 영어 성적
철수 170 75 A B
영희 167

55

B A
철희 180

71

A A
영수 160

49

C B
김국 165

76

B C
도희 163

73

C A
희수 168

54

A

C

개똥이 ?? 165 60 B B

구조화된 데이터의 훌륭한 예시


지도학습(Supervised Learning)을 통한 예측

지도학습은 지도를 공부하는 것이 아니라(...) 시스템에게 문제와 답을 주어 그 패턴을 익히도록 하는 학습방법을 가리킵니다. 

이 학습의 궁극적인 목표는 기존에 본적 없었던 문제를 주었을때 적절한 답을 예측하도록 하는데에 있습니다. 위의 데이터를 예시로 들면, (사람 이름은 무시하고) 키와 몸무게 데이터를 가지고 성별을 예측하게 한다던가, 혹은 성별과 키를 주면 몸무게를 예측하게 한다던가 등의 작업이 가능하겠지요.

사실 이러한 예측은 분류의 문제이기도 합니다. 키/몸무게를 가지고 성별을 예측한다는 것은 결국 해당 데이터가 남/여로 나뉜 2개의 카테고리 중 어디에 더 적합한지 알아내는 문제이기도 하기 때문입니다. 여기에서는 지도학습에서 흔히 사용되는 방법들에 대해서 소개하도록 하겠습니다.


결정 트리 학습법(Decision Tree Learning)

결정 트리는 쉽게 말하면 if-else 문을 여러번 중첩하여 원하는 결과를 산출하도록 만드는 것이라고 할 수 있습니다. 데이터를 보고 이를 자동으로 학습하게 해주는 것인데, 이 방법의 가장 큰 장점은 답이 도출되는 과정을 사람이 알아보기 쉽다는 것입니다. 대게 다음과 같은 형태로 나오게 될테니까요.


키 > 167 이면 남성.

키 <= 167이고

몸무게 < 76이면 여성.

몸무게 >= 76이면 남성.


(예시가 단순한 덕분에 두 단계짜리 if-else로 결정트리가 끝났네요.)

이 트리를 만들어 놓게 되면, 이제 성별을 모르는 자료가 입력되었을때 저 절차를 따라서 성별을 예측해볼 수 있습니다. 개똥이의 경우 키가 165, 몸무게가 60이므로 이 결정트리를 따르자면 여성으로 분류되게 됩니다.


결정 트리는 어떻게 만들까요?


나이브 베이즈 분류기(Naive Bayes Classifier)

흔히 베이즈 정리라고 불리는 조건부 확률이론을 적용하는 분류기입니다. 어떤 하나의 결과(성별)가 여러가지 요인에 의해(수학 성적, 영어 성적) 결정될 때 각각의 요인을 독립이라고 가정하고 조건부 확률을 이용하여 해당 결과가 나올 확률을 계산하는 것이지요. 한번 개똥이의 수학, 영어 성적을 가지고 성별을 예측하는 예시를 들어봅시다.

베이즈 정리는 다음과 같습니다.


(A가 일어났을때 B가 일어날 확률은 B가 일어났을때 A가 일어날 확률과 B가 일어날 확률의 곱과 비례합니다.)

여기서 B에는 결과인 성별이 들어갈 것이고, A에는 입력 값인 수학과 영어 성적이 들어갈 거에요.


사실 P(Math=B, Eng=B | Male) 을 그대로 계산하기는 어렵습니다. 하지만 수학 성적과 영어 성적이 독립이라고 마음 편히 가정하면 독립인 사건이 동시에 일어날 확률은 두 사건이 각자 일어날 확률의 곱으로 쉽게 계산할 수 있죠. (이 독립성 가정이 나이브 베이즈 분류기를 간결하게 만들어주는 장점이자, 독립적이지 않은 사건에 대해서는 부정확한 분류를 하게 된다는 한계가 됩니다.)


위의 계산대로 개똥이가 남성일 확률은 1/28 * P(Math=B, Eng=B)가 됩니다.


마찬가지로 여성일 확률도 계산해보면

1/21 * P(Math=B, Eng=B)가 되지요. 여기서 한 가지 사실을 알수 있는데 결국 P(Math=B, Eng=B)는 양쪽 다 동일하게 나타나므로 실제 비교시에는 고려할 필요가 없어서 생략할 수 있다는 거지요.


남자일 확률과 여자일 확률을 고려해본 결과 여자일 확률이 높으므로, 개똥이는 여성이라고 예측할 수 있습니다.

k-최근접 이웃 분류기(k-Nearest Neighbor Classifier)

이름은 뭔가 어려워 보이지만 사실 최근접 이웃 분류법은 굉장히 단순한 녀석입니다. 분류하고자 하는 입력값(키, 몸무게)과 가장 유사한 데이터들을 찾아서 그 데이터들이 어떤 값(성별)을 가지고 있는지 살펴보는 것이거든요. 유사한 데이터를 찾아야 하므로 최근접 이웃 분류기의 경우 계량가능한 자료에만 사용할 수 있습니다. 몇개의 이웃을 살펴볼것인가는 k값이 결정합니다. k가 5면 5개의 이웃, 7이면 7개의 이웃을 살펴보는거죠. 3-최근접 이웃 분류기로 개똥이의 키와 몸무게로부터 성별을 예측해볼까요?

먼저 개똥이의 키와 몸무게는 (165, 60)입니다. 둘을 묶으면 좌표 평면 상의 한 점으로 표현 가능합니다. 우리가 할 일은 이 점으로부터 가장 가까운 3개의 이웃을 찾는 것입니다.


잡다한 계산은 생략하고 결과를 보면 개똥이와 가장 가까운 이웃은 영희(167, 55), 희수(168, 54), 영수(160, 49)입니다. 가까운 이웃 3개 중 둘이 여성, 하나가 남성이므로 개똥이는 여성으로 분류하게 됩니다.


이 방법은 k 값을 무엇으로 하는지에 따라 그 결과가 크게 바뀌고, 또한 유사도(거리)를 어떻게 측정하느냐에 따라서도 결과가 바뀝니다. 만약 키의 단위가 cm가 아니라 m였다면 키들 간의 차이는 크게 부각되지 않고, 몸무게의 차이에 따라 거리가 영향을 많이 받았을 겁니다. 즉 각 자료값의 단위에 따라서도 결과가 달라질 수 있겠죠. 따라서 이 한계를 극복하기 위해 해당 값을 Z점수로 바꾸어서 거리 연산에 사용한다던지, 아니면 유클리드 거리가 아닌 다른 척도를 사용한다던지 여러가지 다른 방법들이 고안되었습니다.


네트워크 기반 분류기

이 분류기의 경우 각 자료들이 서로 어떤 관계를 맺어서 네트워크로 표현 가능한 경우에 사용가능합니다. 설명을 위해 영희-영수-희수 끼리 서로 친구 관계이고, 개똥이-김국-도희-철수 끼리 서로 친구관계라고 가정해보지요. (나머지 2명은 아싸...)

가중 투표 관게 이웃 분류기(Weighted-Vote Relational-Neighbor Classifier)라는 게 있습니다. 네트워크가 주어지고, 일부 노드의 특성이 주어졌을때, 특성을 모르는 노드의 특성을 예측하는 알고리즘이지요. 개념적으로 설명하자면, 어떤 노드의 특성은 자신과 연결된 노드의특성과 같은 특성을 가질 것이라는 가정을 바탕으로 합니다.


즉, 개똥이의 경우 친구로 연결된 노드로 김국, 도희, 철수가 있습니다. wvRN에 의하면 개똥이가 남자일 확률은 개똥이와 연결된 노드들이 남자일 확률의 평균값(0.667)이 되고, 여자일 확률은 개똥이와 연결된 노드들이 여자일 확률의 평균값(0.333)이 된다는 것입니다. 따라서 이 경우에는 개똥이를 남자로 판단하게 되겠죠.


이 예시의 경우 성별을 모르는 노드가 개똥이 1명이었기에 계산이 싱겁게 끝났지만, 성별을 모르는 노드가 2 이상일 경우, 성별이 확실한노드로부터 확률을 계산해나가면서, 모르는 노드들에게로 확률을 전파하는 식으로 계산이 이뤄집니다.

좀더 복잡한 경우로 위와 같은 네트워크에서, A, B는 남자, D는 여자라고 할때 E, C의 성별을 예측해보지요.

먼저 E가 남자일 확률은 (C는 불확실하므로 배제하고 시작합니다.) A, B, D가 남자일 확률이 각각 1, 1, 0 이므로 0.667이 됩니다.

마찬가지로 C가 남자일 확률은 (E는 불확실하므로 배제하고), B가 남자일 확률이 1이므로 1이 됩니다.

이제 E, C가 남자일 확률이 계산되었으므로, 


이제 다시 E의 확률을 계산합니다. A, B, C, D가 남자일 확률은 각각 1, 1, 1, 0이고, 평균은 0.75가 됩니다. 

C의 확률도 다시 계산하자면, B,E가 남자일 확률이 각각 1, 0.667이므로, 평균은 0.833이 됩니다.


다시 반복해서 계산하면, E는 0.708, C는 0.875

또 계산하면  E는 0.718, C는 0.854

이를 계속 반복하면 E, C가 남자일 확률은 특정 수치에 수렴하게 되고, 이값을 최종적으로 E, C가 남자일 확률로 사용할 수 있겠죠. 



회귀 모델(Regression)

회귀 모델은 입력, 출력의 분포를 보고 해당 분포에 가장 알맞는 직선(또는 곡선)을 찾는 통계적 기법입니다. 입력도 연속적인 수치자료, 출력도 연속적인 수치자료일때 사용가능합니다. 위의 사례에서처럼 분류 문제에는 사용하기가 어려워요. 자세한 설명은 생략.


관련글 더보기

댓글 영역