이번 강의에서는 Bayes Rule 부터 시작해서 Naive Bayes 까지를 다룬다.
Bayes Rule 은 Thomas Bayes 에 의해 고안되었다. 처음 이 법칙은 신이 있음을 증명하기 위해 만들어졌는데 이후 통계뿐 아니라 많은 분야에서 사용되고 있다.
Bayes Rule 은 $P(A|B) = \frac{P(B|A)*P(A)}{P(B)}$ 이다.
(여기서 $P(A|B)$ 는 조건부 확률이라 하며 B 가 일어났다고 할 때 A 가 일어날 확률이다. 예를 들어 A 가 암에 걸릴 확률이고 B 가 남자일 확률이면 $P(A|B)$ 는 남자인 사람 중에 암에 걸릴 확률을 뜻한다.)
Bayes Rule 의 경우 $P(A|B)$ 와 $P(B|A)$ 중 직관적 혹은 쉽게 구할 수 없는 것을 다른 것을 통해서 쉽게 구할 수 있게 해주는 것이다.
Bayes Rule 를 <암> 에 대한 예를 통해 알아보자.
$P(C) = 0.01$ 를 도시에서의 암 환자의 비율이라 하자. 이 때 <Sensitivity> 와 <Spec> 에 대해 알아봐야 한다.
암 환자를 진단했을 때 양성 판정이 날 확률을 <Sensitivity> 라 하고 암에 걸리지 않은 사람을 진단했을 때 음성 판정이 날 확률을 <Spec> 이라 한다.
<그림 1> 도시에서 사람들이 암에 걸릴 확률
그리고 확률들을 Prior, Joint, Normalizer, Posterior 로 나누어 보아야 한다. 먼저 각각을 나타낸 후 설명하겠다.
Prior 의 경우 $P(C) {= P(Pos|C) + P(Neg|C)}, P(~C), P(Pos|C), P(Pos|~C)$ 이다.
Joint 는 $P(C,Pos) = P(C) * P(Pos|C), P(~C|Pos) = P(~C) * P(Pos|~C)$
Normalizer 은 $P(Pos) = P(C,Pos) + P(~C,Pos)$
Posterior 은 $P(C|Pos), P(~C|Pos)$ 이다.
위 경우 우리가 알고자 하는 것은 <양성 반응이 나왔을 때 실제로 암에 걸렸을 확률> 이다.
반대로 <암에 걸렸을 때 양성 반응일 확률> 은 <Sensitivity> 를 설명하며 알아보았고 쉽게 알 수 있는 확률이다.
<그림 2> 암으로 알아보는 Bayes Rule
<그림 2> 에 Prior 을 이용하여 Posterior 을 구하는 과정을 나타내었다.
(실제로 해보면 이해하기 쉬울 것이다.)
여기까지가 암에 대한 예시이다.
다음으로 문자 학습 (Text Learning) 에 대해 알아본다.
<그림 3> 철수와 영희의 문자학습 (철수와 영희가 말을 쓸 확률 $P(철수) = P(영희) = 0.5$)
Bayes Rule 를 이용해서 특정 단어가 나왔을 때 누가 사용했는지 알 수 있다.
<Love Life> 라고 했을 때 누가 말했을 확률이 더 놓을까?
철수가 말했을 확률은 $0.5*0.5*0.3$, 영희가 말했을 확률은 $0.5*0.1*0.1$ 로 철수가 말했을 확률이 더 높다.
앞의 암 예제와 같은 방식으로 여러 경우를 생각해 볼 수 있다.
이러한 Bayes Rule 을 이용한 방법을 Naive Bayes 라 한다.
Naive Bayes 는 <무슨 단어가 나올지>, <단어가 몇 개가 나올지> 에 관해서는 알 수 있으나 <단어의 위치> 는 알 수 없다.
이름 앞에 Naive (순진한) 이 들어간 이유는 바로 이 때문이다.
Naive Bayes 는 문제점이 존재하지만 쓰기 쉽기 때문에 자주 사용된다.
(구글에서 Naive Bayes 를 사용하다 발생한 문제 중 하나는 <Chicago Bulls> 를 검색할 때 야구팀이 나오지 않고 <Chicago> 와 <Bull> 이 따로 나오는 것이다. 이 문제점은 관계없는 단어끼리 붙을 때 잘 연결되지 않는다는 것이다.)
** 강의에서 Katie malone 이 강조한 말은 Naive Bayes 를 Black Box 라 생각하지 말고 안을 파헤쳐 보자는 것이다.
** Mini Project
이번 장에서 할 프로젝트는 단어를 학습시키고 누가 이 단어를 사용했나 알아보는 것이다.
강의에 필요한 프로그램은 Udacity 내 Git 저장소의 것을 클론해오면 된다.
Tool 폴더 내 StartUp 을 이용하여 컴퓨터에 설치되어있지 않은 라이브러리들을 추가한다. (글쓴이의 경우 아나콘다를 이용하여 설치했기 때문에 이 과정을 건너뛰었다.)
그리고 nb_author_id.py 파일 내 아래와 같이 추가한다.
from sklearn.naive_bayes import GaussianNB # Gaussian NB class 추가
clf = GaussianNB() # Classifier 추가
t0 = time() # 연산 시간 체크
clf.fit(features_train, labels_train) # fitting (Training)
print "training time:", round(time()-t0, 3), "s" # 연산 시간 체크
t1= time()
pred = clf.predict(features_test) # 예측값 입력
print "training time:", round(time()-t1, 3), "s"
print clf.score(features_test, labels_test) # 예측값과
<코드 1> nb_author_id.py
단어 학습의 경우 해리포터 작가인 J.K. Rowling 이 다른 필명으로 출판한 책을 그녀의 책이라 주장한 것이 대표적이다.
이번 글에서는 Naive Bayes 까지 알아보았고, 다음 강의에서 SVM (Support Vector Machine) 에 대해 알아볼 것이다.
<참고 문헌>
1. Intro to ML in Udacity
<그림>
<코드>
'기계학습 > Intro to ML in Udacity' 카테고리의 다른 글
Decision Tree (1/41) -> (41/41) (0) | 2017.04.07 |
---|---|
SVM (Support Vector Machine) (1/38) -> (38/38) (0) | 2017.04.03 |
Welcome to Machine Learning -> Naive Bayes (22/43) (0) | 2017.03.29 |
소개 (1) | 2017.03.29 |