언어처리

naive bayes classifier

고요한하늘... 2009. 6. 19. 17:09

naive bayes classifier는 스팸 처리에 사용하는 대표적인 알고리즘이다.

이전에 스팸으로 처리한 문서를 기반으로 앞으로 들어오는 문서가 스팸문서인지 아닌지를 판단하는 방법이다.

 

알고리즘 앞에 naive라는 이름이 붙은 이유는 다음과 같은 이유때문이다.

문서 A에 a, b,c라는 단어가 있다고 할때

b가 나타날 확률은 a나 c와 무관하다. 즉 독립적이라고 가정하는 것이다. 물론 이건 사실아닌 가정이다.

식으로 표현하면

Pr(C|D) = Pr(C|t1....tn) = Pr(C|t1)Pr(C|t2)...........Pr(C|tn)

 

그럼 문서 D가 C클래스일 확률은 다음과 같다

Pr(D) = Pr(t1 .......tn)

Pr(C|D) = Pr(C|t1....tn) = ( Pr(C)*(t1...tn|C)) / Pr(t1....tn) <- bayesian theorem

 

간단히 예를 들어 보면

 

문서가 4개 있다고 가정한다( A,B ... F는 Term )

(클래스1)     문서1 : A B A

(클래스1)     문서2 : A A C

(클래스1)     문서3 : A D

(클래스2)     문서4 : F E A

 

단어 A B C D E F 각각의 확률을 계산하면 다음과 같다

P( A | 클래스1 ) = ( 클래스1에서 A의 출현수 / 클래스1의 전체 텀수) = 5/8

P( B | 클래스1 ) = 1/8

P( C | 클래스1 ) = 1/8

P( D | 클래스1 ) = 1/8

P( E | 클래스1 ) = 0/8

P( F | 클래스1 ) = 0/8

 

P( A | 클래스2 ) = ( 클래스2에서 A의 출현수 / 클래스2의 전체 텀수) = 1/3

P( B | 클래스2 ) = 0/3

P( C | 클래스2 ) = 0/3

P( D | 클래스2 ) = 0/3

P( E | 클래스2 ) = 1/3

P( F | 클래스2 ) = 1/3


P(클래스1) = 3/4

P(클래스2) = 1/4

테스트문서 : A A A F E

P( 클래스1 | 테스트문서 ) = 3/4 * 5/8 * 5/8 * 5/8* 0/8 * 0/8

P( 클래스2 | 테스트문서 ) = 1/4 * 1/3 * 1/3 * 1/3* 1/3 * 1/3


경우에 따라서 빈도수가 0이면 확률값이 0이 될수 있고 이 값으로 인해 모든 값이 0이 되는 경우가 있다 이런 경우를 회피하기 위해

분자에는 +1, 분모에는 해당클래스에서 해당 키워드가 나온회수를 더한다

예를 들면

P( A | 클래스1 ) = ( 클래스1에서 A의 출현수  + 1 / 클래스1의 전체 텀수 + 클래스1에 나온 A의 텀수 ) =(5+1)/8(+6)


'언어처리' 카테고리의 다른 글

intention search(의도파악)를 한다면  (0) 2010.07.09
네이버 형태소 분석 결과  (0) 2009.08.06
single link and complete link  (0) 2009.06.01
스러운 vs 스런  (0) 2009.05.28
clustering site ( document clustering )  (0) 2009.05.22