Numpy를 이용한 기계학습 프로젝트 - 6
오늘은 나이브 베이스 확률이론을 사용해서 스팸메일 필터링 소프트웨어를 동작시키고 구현해 보았다.
먼저, 텍스트 토큰을 생성한다. 나는 아래와 같이 생성하였다.
그 다음, 이메일 데이터 집합 (예제 파일로 제공하는 샘플 데이터이다.)을 꺼낸다. 그 후, 파일 구문 분석 소스와 전체스팸 검사 함수를 Python으로 만들어 보았다.
-------------------------------------------------------------------------------------------
* Numpy 기계학습의 모든 문서는 제가 머신러닝을 공부하고, 제 프로젝트에 필요한 알고리즘을 찾기 위해 정리하는 일종의 '요점정리 노트' 입니다. 혹여나 오해 없으시기 바랍니다. (2016.03.14 추가)
-------------------------------------------------------------------------------------------
소스코드는 아래와 같다.
def textParse(bigString): import re listOfTokens = re.split(r'\W*', bigString) return [tok.lower() for tok in listOfTokens if len(tok) > 2] def spamTest(): docList=[]; classList = []; fullText =[] for i in range(1,26): wordList = textParse(open('email/spam/%d.txt' % i).read()) docList.append(wordList) fullText.extend(wordList) classList.append(1) wordList = textParse(open('email/ham/%d.txt' % i).read()) docList.append(wordList) fullText.extend(wordList) classList.append(0) vocabList = createVocabList(docList) trainingSet = range(50); testSet=[] for i in range(10): randIndex = int(random.uniform(0,len(trainingSet))) testSet.append(trainingSet[randIndex]) del(trainingSet[randIndex]) trainMat=[]; trainClasses = [] for docIndex in trainingSet: trainMat.append(bagOfWords2VecMN(vocabList, docList[docIndex])) trainClasses.append(classList[docIndex]) p0V,p1V,pSpam = trainNB0(array(trainMat),array(trainClasses)) errorCount = 0 for docIndex in testSet: wordVector = bagOfWords2VecMN(vocabList, docList[docIndex]) if classifyNB(array(wordVector),p0V,p1V,pSpam) != classList[docIndex]: errorCount += 1 print "classification error",docList[docIndex] print 'the error rate is: ',float(errorCount)/len(testSet)
맨 마지막 실행 화면은 사진으로 못 찍었지만 글로 써 본다.
>>> bayes.spamTest()
the error rate is : 0.0
초등학교 5학년 때 서울교대 영재원을 다니면서 오바마와 박근혜 대통령의 연설문 데이터에서 가장 많이 쓰인 단어를 추출해내는 프로그램을 교수님이 만들어 보라고 하신 적이 있다. 단순히 기술만 생각한다면 이 수업은 별 효과가 없을 것이라고 생각한다. 아마도 머신러닝도 그럴 것이다.
오늘은 여기까지 하기로 했다.
'Project > Dev Story' 카테고리의 다른 글
Numpy를 이용한 기계학습 프로젝트 - 8 (0) | 2016.01.20 |
---|---|
Numpy를 이용한 기계학습 프로젝트 - 7 (0) | 2016.01.19 |
Numpy를 이용한 기계학습 프로젝트 - 5 (0) | 2016.01.09 |
Numpy를 이용한 기계학습 프로젝트 - 4 (0) | 2016.01.08 |
Numpy를 이용한 기계학습 프로젝트 - 3 (0) | 2016.01.07 |