스팸메일, 댓글등의 감정분류등에 간편하게 쓰이는 Naive Bayes Classifier 의 이론 원리를 알아보자.
정상메일(ham) 과 비정상메일(spam)을 분류하기 위해 ham 8개 spam 4개의 혼합된 데이터를 트레이닝 했다고 하자.
트레이닝 데이터에 "Dear" "Friend" "Lunch" "Money" 의 4개 단어가 사용되었다고 할때 내부적으로 아래와 같이 ham 트레이닝 데이터 속에 출현되는 빈도의 히스토그램과 spam 트레이닝 데이터의 출현빈도를 계산한다.
히스토그램 | 출현횟수 | P(A | B) *P = Probabilistic 확률적인 A = 단어 B = 클래스(ham, spam) |
||
ham | Dear : 8 번 Friend : 5 번 Lunch : 3 번 Money : 1 번 전체 : 17 |
P(Dear|ham)=8/17=0.47 P(Friend|ham)=5/17=0.29 P(Lunch|ham)=3/17=0.18 P(Money|ham)=1/17=0.06 |
||
spam | Dear : 2 번 Friend : 1 번 Lunch : 0 번 Money : 4 번 전체 : 7 |
P(Dear|ham)=2/7=0.29 P(Friend|ham)=1/7=0.14 P(Lunch|ham)=0/7=0.00 P(Money|ham)=4/7=0.57 |
Prior Probalitity (우선확률=초기추측) 계산
P(ham) | = ham트레이닝데이터 수 / 전체 트레이팅 데이터 수 | =8/12 = 0.67 | |
P(spam) | = spam트레이닝데이터 수 / 전체 트레이팅 데이터 수 | =4/12 = 0.33 |
미지의 메일(내용="Dear Friend")의 분류
ham score | P(ham) x P(Dear|ham) x P(Friend|ham) | =0.67 x 0.47 x 0.29 = 0.09 | 〇 | |||||||
spam score | P(spam) x P(Dear| spam ) x P(Friend| spam ) | =0.33 x 0.29 x 0.14 = 0.01 | X |
위의 계산 결과로 미지의 메일은 정상메일(ham = 0.09 > 0.01)로 분류 되었다.
♠ 빈도가 0번인 단어의 대응
미지의 메일(내용="Lunch Money Money Money") 을 분류하고자 하면 직관적으로는 P(Money|ham) 값이 크기때문에 스팸메일로 분류될것이란걸 알 수 있지만 P(Lunch|ham) 값이 0 이므로 계산적으로는 정상메일로 분류되게 된다.
이를 극복하기 위해 빈도수에 알파값을 더해 주면 해결 할 수 있다.
+ alpha ■ ⇒ | ||
+ alpha ■ ⇒ |
'자연언어처리 (NLP)' 카테고리의 다른 글
nltk.NaiveBayesClassifier 를 이용한 스팸메일 분류 (0) | 2024.04.07 |
---|---|
wordcloud (0) | 2024.03.13 |
stopwords (0) | 2024.03.13 |
워드 토큰화 (0) | 2024.03.13 |
(Word2Vec) model training (1) | 2023.12.21 |