Spam Classifier - implementation with Octave

2019. 2. 14. 13:45Artificial Intelligence

* 첨부된 자료의 저작권은 COURSERA에 있음을 미리 밝힙니다.





Spam Classifier

 - Implementation with Ocave 



이번 시간에는 지난 시간에 논의한 바를 바탕으로 Spam Classifier 모델을 직접 구현해보았다.

Spam Classifier Algorithm이 이메일을 분류하는 과정은 다음과 같다.



1. Preprocessing Emails 

이메일을 처리하기 전에, 프로그램이 이메일을 처리하기 쉽도록 '전처리'단계를 밟아주는 것이 중요하다.

이 전처리 단계에서는 숫자들, 특수기호들, 서로 다른 URL주소들 등을 각자의 기준을 가지고 지정된 특정한 String으로 대체해 주는 것이다.

예를 들어 모든 이메일 주소들은 "emailaddr", URL 주소들은 "httpaddr" 등으로 대치해주는 것이다.

스팸메일의 주소나 URL등은 기존에 발신된 주소와는 다른 경우가 많기 때문에, 저번에 스팸으로 분류했던 그 주소인가? 라는 식의 스팸메일 판정법은 효율이 낮다. 따라서 "URL이 존재하는가?" 나, "email이 존재하는가?"등의 기준을 적용하는 것이 더 효율적이다.

processEmail.m에 들어있는 전처리 기능들은 다음과 같다.











2. Vocabulary List

스팸메일을 학습시키면서, 스팸메일에 100번 이상씩 등장하는 단어들을 Vocabulary List 에 넣는다. 

실제로 약 10,000 ~ 50,000개의 단어들이 스팸메일에 주로 쓰인다고 한다.

이 Vocabulary List를 가지고, 우리는 Preprocessed 된 이메일의 text file을 Vocabulary List 에 매핑시킨다.

즉, 리스트에 "dollar"라는 단어가 15번 인덱스에 들어가 있다면, 전처리된 이메일의 텍스트에 들어있는 "dollar"를 모두 15로 수정하는 식이다.




3. Extracting Features from Emails

이제 1, 2단계를 거친 이메일의 모습은 Vocabulary List에 들어 있는 인덱스들로 구성이 되어 있을 것이다.

여기서 Feature Vector를 추출하여 이 이메일이 스팸인지 아닌지를 학습시킬 수 있다.

feature vector의 크기는 자연스럽게 Vocabulary List의 크기가 될 것이다. 예를 들어 인덱스 0번의 단어가 이메일 에 존재한다면 Feature vector index 0은 값은 1이 되는 식이다. 

이렇게 Feature들을 추출한 다음 SVM을 통해 학습시키면 Spam Classifier를 모델링 할 수 있다.


반응형