조건부 확률과 Naive Bayes Classifier 프로그래밍

http://blog.sragent.pe.kr/33 에서 가져온 내용


예를 들어,

설문 조사 결과 모든 소비자를 놓고 봤을 때 냉면을 좋아할 확률이 70%라고 하는데, 전체가 아니라 남자가 냉면을 좋아할 확률이 궁금해 졌다. 
"남자의 경우 냉면을 좋아할 확률은?"  

비슷한 예로,
"한국인의 경우 키가 180 이상일 확률은?"
"두산 베어스가 9회에 지고 있는 상황에서 경기에 이길 확률은?"
이렇게, 그냥 확률이 아니라, 어떤 조건하에서, 어떤 경우, 어떤 상황이 주어진(given이라고 읽는다) 상태에서의 확률이 조건부 확률(Conditional Probability)이다. 그리고, 식으로는

P(냉면이좋아 | 남자)

이렇게 쓴다.

통계 기반 언어처리에서 이 조건부 확률은 무수히 많이 쓰인다.
예를 들어, 문서 분류기(Document Classifier)에서는 다음과 같은 조건부 확률이 쓰인다.
문서에 구글, 야후라는 단어가 나타난 경우 그 문서의 카테고리가 IT일 확률은? 식으로는

P(Category=IT | 구글, 야후)


자, 그럼 본격적으로 저 확률을 계산을 해보겠다.
조건부 확률의 정의에 의해서,

P(Category=IT | 구글, 야후) = P(Category=IT, 구글, 야후) / P(구글, 야후)

이다.
식에서 분자 부분을 읽어보면,
Category=IT이고, 구글, 야후 라는 단어가 나올 확률이다. 용어로는 Joint Probability라고 한다. 우리말로는 잘 모르겠다. -.-;; 
난 사실 이 부분을 맨 처음 들었을 때, 조건부 확률과 Joint 확률의 의미 차이가 정말 마음에 와 닿지 않았다.
A가 주어진 경우, B이고 C일 확률(조건부 확률) 이랑,
A이고 B이고 C일 확률(Joint 확률) 이랑
뭐가 달라?
그런데, 저 위의 조건부 확률의 정의, 즉, 계산 방법을 곱씹어 보면 의미 차이가 조금씩 와 닿는다.
만일 전체 샘플이 1000개라고 하면, 1000개중에서 카테고리가 IT이고, 구글이랑 야후라는 단어가 나타나는 문서가 5개가 있다면 P(Category=IT, 구글, 야후) = 5/1000 = 0.005 이다.
만일 전체 샘플이 1000개 인데 그중에 야후, 구글이라는 단어가 나타나는 문서가 10개이고, 10개중에 카테고리가 IT인 문서가 5개 라면, P(Category=IT | 구글, 야후) = 5 / 10 = 0.5 이다.
구글, 야후가 나온 문서로 한정 지으면 카테고리가 IT일 확률은 0.5라는 얘기다. 참 쉽다. 정말?

자자, 이제 진짜 문서 분류 얘기를 해보자. 진짜 문서에 구글, 야후 처럼 달랑 두 단어 있는 문서를 만나는 행운이 과연얼마나 있을까? 실상은 이렇다.

P(Category=IT | 구글, 야후, 네이버, 다음, ... 그외 수백 단어)

조건부 확률의 정의에 의해

P(Category=IT | 구글, 야후, 네이버, 다음, ... 그외 수백 단어)
=  P(Category=IT, 구글, 야후, 네이버, 다음... 그외 수백 단어) / P(구글, 야후, 네이버, 다음, ... 그외 수백 단어)

말로 풀자면 이렇다. 우린 지금, 문서에 구글, 야후, 네이버, 다음, ... 그외 수백 단어가 나타난 상황하에서 문서의 카테고리가 IT인 확률을 알고 싶다.  정의에 의해서 샘플 중에서 구글, 야후, 네이버, 다음, ... 그외 수백단어가 똑같이 나온 문서들 중에서, 카테고리가 IT인 문서를 세보면 조건부 확률을 구할 수 있다.
그런데 과연, 샘플에
구글, 야후, 네이버, 다음, ... 그외 수백단어가 똑같이 나온 문서가 1개는 있을까? 있는게 이상하다. 결론! 조건부 확률 정의 식은 무용지물이다.

이 시점에서 어디서 주워들은 독립가정을 들이 미는 사람이 있을 법하다. 그러니까, 정의식의 분자에 독립가정을 적용하면, 즉, '각 단어의 출현은 서로 아무 인과 관계가 없어' 라고 가정하면, 각 단어 출현 확률의 곱으로 바꿀 수 있다 뭐 이런거 말이다. 그렇게 해볼까?

P(Category=IT | 구글, 야후, 네이버, 다음, ... 그외 수백 단어) 
=  P(Category=IT, 구글, 야후, 네이버, 다음... 그외 수백 단어) / P(구글, 야후, 네이버, 다음, ... 그외 수백 단어)
=  P(Category = IT) x P(구글) x P(야후) x P(네이버) x P(다음) x P(... 그외 수백 단어) / P(구글) x P(야후) x P(네이버) x P(다음) x P(... 그외 수백 단어)
= 약분하면 --> P(Category = IT)
결론 : P(Category=IT | 구글, 야후, 네이버, 다음, ... 그외 수백 단어) = P(Category = IT) --> 조건이 있으나 없으나 확률은 똑같다는 모순에 도달!

응? 결국 저 독립가정의 결론은 수백 단어가 나오든 수천 단어가 나오든 '카테고리가 IT일 확률은 그냥 카테고리가 IT일 확률이다.' 라는 가정을 해버렸다는 뜻이다. 이 가정은 옳지 않다. 문맥을 보고 카테고리를 결정하려고 하는게 애초의 목적이니까.

그래서, 필요한게 Bayesian Rule이다. Bayesian Rule에 의하면

P(Category=IT | 구글, 야후, 네이버, 다음, ... 그외 수백 단어)
= P(Category=IT) x P(구글, 야후, 네이버, 다음, ..., 그외 수백 단어 | Category=IT) / P(구글) x P(야후) x P(네이버) x P(다음) x P(... 그외 수백 단어)

 
로 쓸 수 있다. 여기서 두번째 확률
P(구글, 야후, 네이버, 다음, ..., 그외 수백 단어 | Category=IT) 은 구할 수 있나? 즉, 샘플에서 Category=IT인 문서들 중에서 구글, 야후, 네이버, 다음, ..., 그외 수백 단어가 똑같이 나오는 문서는 몇개? 역시나 샘플에는 수백개의 단어가 똑같이 나오는 문서는 없을 것이니 이거 역시 불가!
하지만, 여기서 저 위에서 처럼 어설프지 않은 제대로 된 독립가정을 할 수 있는데 이름하여 '조건부 독립(Conditional Independence)' 가정이다. 말로 풀어 쓰자면 이렇다.

Category가 IT인 조건 아래에서는 구글, 야후, 네이버, 다음, 그외 수백 단어의 출현은 독립적인 사건이라고 가정한다. 이걸 식으로 쓰면

P(구글, 야후, 네이버, 다음, ..., 그외 수백 단어 | Category=IT)
= P(구글|Category=IT) x P(야후|Category=IT) x P(네이버|Category=IT) x P(다음|Category=IT) x ...  x P(그외 수백 단어|Category=IT)

이다. P(구글|Category=IT) 는 샘플에서 (구글이란 단어가 있는 문서 수 / 카테고리가 IT인 문서 수)로 확률을 구하면 된다.

최종적으로 Naive Bayes Classifier는 이런 확률 계산을 모든 카테고리에 대해서 해본 다음 확률이 제일 높은 카테고리를 선택하게 된다. 마지막 정리는 뽀대나게 수식 편집기로.
세번째 줄에서 네번째 줄로 넘어 갈때 분모가 사라진 이유는 여기서는 argmax 카테고리 c를 구하는게 목적이므로, 모든 카테고리에서 같은 값인 분모는 생략해 버린 것이다.




100권 읽기 프로젝트 시작 100권 읽기

스스로 큰 위기감을 느꼈다.
어디서 배우고, 인터넷에서 줏어듣고, 여기저기 다른사람들의 소스를 뒤지면서 늘긴 했지만
내가 봐도 잡스럽다 못해 쓰레기같다. 
'당신이 구현한 관리프로그램을 탑재한 비행기에 몸을 맡길수 있습니까?'
여기에 대한 내 대답은 과거나 지금이나 '아니올시다.'이다.

지금까지 짠걸 이리저리 훑어봤을때,
기능구현은 되는 것 같은데, 핵심적인 뭔가가 전혀 없다.
그저 뭉쳐놓은 똥덩어리같다.

결론을 한마디로 요약할수 있다.
'절대적인 기초부족'
대학시절 워낙 막장으로 보냈기 때문인지 뭔지는 몰라도,
기초가 너무 없어서 그렇다고 생각된다.
따라서 전공서적 100권 읽기를 시작한다.
한주에 한권, 전공서적을 읽는다.
그간 읽은 책도 그만큼 되지 않을까 싶긴 하지만
체계적으로 생각하고 읽은게 아닌만큼 의미 자체도 적은데다,
스스로 균형적으로 읽고 있는지를 체크하는 것은 불가능하다.

기존에 읽었던 것이든, 새로 읽는 것이든 상관없다.
읽고, 느낀점이나 발견한점, 생각을 다시 정리한다.
오늘부터 시작.

알 토네리코3 잡담



아 정말 멋지다.
물론 게임은 해봐야 알겠지...
....
하긴 나와도 저때라면...
플레이는 무리일듯

갠적인 감상은
원화랑 실제게임상의 모델이 너무 다르다!!
캐릭 누가 뽑은거냐!!

1 2 3 4 5 6 7 8 9 10 다음