이번 글에서는 기계학습 (Machine Learning) 이 무엇인가 부터 시작해서 간단한 분류 (Classification) 까지를 다룬다.
이 강의를 수강하기 위해서는 파이썬 (Python), 통계에 대한 지식이 필요하다.
Acerous 가 무엇일까? (What is acerous?)
<그림 1> 에 여러 동물이 있다. <그림 2> 에는 동물들을 <Acerous> 와 <Not acerous> 로 나누어 보았다.
여기서 <말> 은 Acerous 인가? Not acerous 인가? (이 문제에서는 우리가 Acerous 의 뜻을 모른다 가정하고 진행한다.)
<그림 1> 코끼리, 코뿔소, 고양이, 개, 말 (분류 X)
(https://namu.wiki/)
<그림 2> 코끼리, 코뿔소, 고양이, 개, 말 (분류 O)
(https://namu.wiki/)
<그림 2> 를 살펴보면 고양이와 개는 <Acerous>, 코뿔소와 코끼리는 <Not Acerous> 이다. 이때 말은 어느 분류에 들어갈까?
말은 <Acerous> 이다. <Acerous> 은 <뿔이 없는> 이라는 뜻이다.
우리는 <뿔> 이라는 것을 특징 (Feature) 으로 설정해서 말을 분류하는 것이다.
앞으로의 기계학습 공부에 있어 특징을 찾는 것은 매우 중요한 일이다. (가령 위의 분류 예에서 특징이 <평균 무게> 라고 한다면 말은 오른쪽 그룹으로 분류된다.)
다음으로 Supervised Classification 에 대해 살펴보겠다.
말 그대로 <지도> 를 통해 분류한다는 것이다. 위에서 보았던 <말> 이 한 예이다.
먼저 아래 4 경우 중 어떤 것이 Supervised Classification 인지 알아보자.
(이 부분은 듣는 사람에 따라 조금 애매할 수 있다.)
1. 영상에서 사람 얼굴 구분하기
2. 은행 시스템에서 어떤 곳으로 송금하는지를 통해 사기인지 알아내기
3. 평소 들은 음악을 이용해 음악 추천하기
4. 강의를 듣는 것을 바탕으로 학생을 두 분류로 나누는 것
여기서 1,3 번이 Supervised Classification 이다.
1 번의 경우 영상에서의 특징점을 이용하여 특정 부분이 누군가의 얼굴이라고 인식한 뒤 임의의 사진에서 그 사람의 얼굴을 찾아주는 것이다.
3 번의 경우 평소에 즐겨듣던 음악의 강도, 빠르기 등을 이용해서 비슷한 정도의 음악을 추천해주는 것이다.
이에 반해 2 번은 <사기> 를 당한 경우에서 학습하는 것이 아니라 특정 경우일 때 사기라고 분류하는 Unsupervised 의 경우이다.
또한 4 번은 특정 강의를 들은 학생들을 단순히 분류하는 것으로 Supervised Classification 이 아니다.
다음으로 특징 (Feature) 과 레이블 (Label) 에 대해 알아보겠다.
<그림 3> 을 참고해서 설명하겠다.
<그림 3> 특징과 레이블 (Feature and Labels)
<그림 3> 은 음악을 들었을 때 사람이 느끼는 감정에 대해 나와있다. 음악의 특징은 그림과 같이 4 가지이고 이것들의 조합을 통해 사람은 음악을 선호하는가에 대해 알아볼 수 있다.
이것을 보고 특징을 입력해 레이블을 찾는다고 한다. (Input feature and find(produce) label)
특징과 레이블을 더 자세히 알아보기 위해 강좌에서는 <Scatter Plot> 을 이용한다. (Scatter Plot 은 직교 좌표계에서 두 변수를 가지고 값들을 나타내는 것이다.)
<그림 4> Scatter Plot
<그림 4> 에서 파란색 분류는 경사가 급하지 않고 노면이 고르지 못하거나, 경사가 급하고 노면이 고른 경우이고 빨간색은 그 반대이다.
이 때 녹색은 어느 분류에 속할까? 이 질문에 대부분은 파란색 분류에 속한다고 할 것이다. (정말 낮은 확률로 빨간색 분류에 속할 수 있지만 <높은> 확률로 파란색 분류에 속할 것이다.) 맞는 말이다.
여기서 검은색 선으로 나뉜 부분을 <Decision Surface> 라고 한다.
우리는 앞으로 이 Decision Surface 를 찾는 과정을 학습할 것이다.
<GaussianNB Deployment on Terrain Data> 예제
이 예제에서는 sklearn 을 이용하여 Training set 을 이용해 학습시킨 후 Test set 을 활용해 얼마나 잘 학습되었나 확인해 보는 것입니다.
ClassifyNB.py 파일에 아래와 같이 코드를 적고 실행하면 된다.
from sklearn.naive_bayes import GaussianNB // Library 를 불러온다.
clf = GaussianNB() // clf 에 Classifier 을 불러온다.
clf.fit(features_train, labels_train) // clf 에 training data 를 학습시킨다.
return clf // 학습시킨 데이터를 clf 로 반환한다.
아래에 return clf 를 해주는 이유는 studentMain.py 에서 classify 의 값을 받기 때문이다.
-- 예제 끝
마지막으로 Training Data 와 Test Data 에 대해 잠시 이야기 하겠다.
만약 여러분에게 데이터가 100개 있다면 90개는 학습에, 나머지 10개는 테스트에 사용되어야 한다.
여기엔 두 가지 의미가 있다.
첫 번째는 테스트를 하는 작업은 꼭 해야하기 때문에 남겨두어야 한다는 것
두 번째는 학습했던 데이터를 이용해서 테스트를 하게 된다면 학습 결과가 조작될 수 있다는 것이다.
이번 글은 여기서 마치겠다.
다음 글에서는 Bayes 정리가 무엇인지, 그리고 Naive Bayes 에 대해 이야기할 것이다.
<참고 문헌>
1. Intro to ML in Udacity
<그림>
1. 나무위키 (https://namu.wiki/)
2. 나무위키 (https://namu.wiki/)
'기계학습 > Intro to ML in Udacity' 카테고리의 다른 글
Decision Tree (1/41) -> (41/41) (0) | 2017.04.07 |
---|---|
SVM (Support Vector Machine) (1/38) -> (38/38) (0) | 2017.04.03 |
Naive Bayes (22/43) -> (43/43) (0) | 2017.03.30 |
소개 (1) | 2017.03.29 |