기계학습/Intro to ML in Udacity

Welcome to Machine Learning -> Naive Bayes (22/43)

내꿈은자동화 2017. 3. 29. 17:38

이번 글에서는 기계학습 (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