*이 포스트는 80% 정도는 CMU의 10-601; Machine Learning (by Prof. Tom Mitchell) 강의를, 20% 정도는 GIST의 EC4213 Machine Learning & Deep Learning (by Prof. 손진희) 강의를 참고하고 있습니다.
아 Naive Bayes의 중요성을 새삼 실감하는 강의 편성... 장장 4시간 가량의 강의가 모두 naive bayes입니다...
오늘은 거두절미하고 예시부터 바로 살펴보도록 하겠음
Text Classification, "Bag of Words" Model
수업에서 아마 제일 많이 등장하는 자연어 처리 (Natural Language Processing, a.k.a NLP) 관련 예시가 이게 아닐까 싶음
그 중에서도 제일 많이 등장하는 것이 바로 spam mail classifier인데요, 왜 꼭 label을 spam vs ham이라 하는지 모르겠음ㅋㅋ 재밌냐구...
Quick-review! 우리가 지난 시간에 다룬 Naive Bayes classifier를 간단 복습해봅시다.
\begin{equation}\label{eq1}P(Y = y_k | X_1, X_2, ..., X_n) = \frac{P(Y = y_k) \prod_{i=1}^{n} P(X_i | Y = y_k)}{\sum_{j} P(Y = y_j) \prod_{i=1}^{n} P(X_i | Y = y_j)}\tag{1.a}\end{equation}
늘 그렇듯이 posterior 확률을 추정하는데, 이때 MLE/MAP 등을 이용해 $P(Y=y_k)$와 $P(X_i|Y=y_k)$를 추정하고, 이를 바탕으로 새로운 데이터셋 $X^{new}$에 대해 $\arg\max_{y_k}\left[\text{Numerator of }\ref{eq1}\right]$을 계산한다는 내용이었지요~.~
이제 이걸 바아로 그냥 스팸 메일 분류에 적용을 해보겠습니다.
내가 받았던 아주 웃긴 스팸 메일임
"문안 인사,"가 진짜 킬포ㅋ.ㅋ 그나저나 저 이메일 도메인 찾아보니까 브라질 경찰이던데.. 이게 무슨 일입니까 ¯\_(ツ)_/¯
암튼 이런 건 명백한 스팸이죠! 이게 스팸인지 아닌지를 분류하는 과제니까 label $Y$는 spam/ham의 바이너리가 될 것이구요. 그러면 여기서 Attribute인 $X_i$를 어떻게 정의해주느냐 하는 게 남는데요, 첫 번째 방법은 우리가 정의한 어휘집(vocabulary) $V$을 $V: \{w_1, w_2, \dots, w_n\}$이라고 했을 때, 이 메일에 $w_i$의 등장 여부를 Binary RV인 $X_i$로 정의하자는 것입니다. 근데 성인의 어휘집..이 보통 50,000개의 단어로 구성돼있다고들 하는데.. ㅋㅋ 그럼 $2^{50000}$? 우웩
다른 방법은, $X_i$를 어떤 이메일 상의 $i$번째에 위치한 단어로 정의하는 거예요. 여기선 "안녕하세요"가 되겠네! 그리고 $X_i$끼리의 iid, 즉 서로 독립이고, 동일한 분포를 가지는 RV들이라고 가정해주는 것이지요. 이러면 $n$의 수가 확 줄어드니까 윗 단락의 옵션보단 한참 나은지도? 그런데 어떤 문서는 1000개 가량의 단어로 구성되어 있어서 과연 이렇게 $X_i$를 설정하는 것이 얼마나 도움이 되나 싶을 수 있어요. 이 사진처럼 성의없는 스팸 메일이 세상에 몇 개나 된다고..^^ 이때 Naive Bayes의 conditional independence assumption이 큰 도움이 됩니다! 그 이유는 이전 포스트 참고~.~
헉 근데.. 또 문제가 생김.. 이렇게 하면 $P(X_1=\text{Hello}|Y=\text{Spam})$ 와 $P(X_7=\text{Hello}|Y=\text{Spam})$의 확률이 달라질 가능성이 무쟈게 높아요.. 당연하지 않음? 근데 Hello의 위치가 달라진다고 해서 스팸 메일의 여부가 달라지는 경우가 얼마나.. 아 물론 개연적인 시나리오이기는 한데 $P(X_3=\text{donation}|Y=\text{Spam})\neq P(X_8=\text{donation}|Y=\text{Spam})$ 뭐 이런 예시를 또 생각하면 어라 좀.. 아닌데 싶은 생각이 들지요.
그래서 Bag of Words라는 개념이 등장합니다. No literally, it's just a bag of words... 추가적인 가정..이라고 해야할 것 같은데, 몇 번째 위치에 그 단어가 있는지는 아예 신경을 안 써주겠다는 의미입니다. 즉, $P(X_i =w_k |Y=y)=P(X_j =w_k |Y=y)$라고 해주는 것이지요. 그럼 저기서 "저는 Scott입니다. MacKenzie를 위한 CEO이자 ..."로 일종의 Anagram..을 할 수도 있는 것임ㅋㅋ
근데 잠깐. 그럼 여기서 $P(X="hello")$같은 건 우째 구하지요?! 하고 물을 수 있는데! 또 MAP를 소환합니다ㅋ.ㅋ 아까 성인의 어휘집은 약 50,000개의 단어로 구성되어 있다고 언급했는데, 이렇게 Bag of Words 모델을 가정하면 결국 이 document에서 어떤 단어 $w_i$가 등장할 확률 $P(X=w_i)$는 마치 50k개의 면으로 구성된 주사위를 메일에 존재하는 단어의 총 개수만큼 굴려서 숫자 $i$가 써있는 놈이 몇 개 나오는지 보는 거랑 아님?! 우리가 지난 번에 Beta 분포를 다뤘었는데, 그때는 binomial이었다면 지금은 multinomial한 경우니까.. 이런 경우를 Drichilet 분포라고 한다는군요~.~ 톰 미첼 교수님이 추가적으로 설명해주심ㅋㅋ 암튼 아래와 같이 추정하면 됩니다.
\begin{equation}\label{eq2}\hat{\theta}_i = \frac{\alpha_i + \beta_i - 1}{\sum_{j=1}^k (\alpha_j + \beta_j - 1)}\tag{1.b}\end{equation}
아니면 그냥 MLE 써서 $\hat{\theta}_i=\frac{n(w_i)}{n}$하면 됨! 뭐가 됐든 prior를 estimate해서 써먹으면 그만,,,
그리고 likelihood인 $P(X=w_i|Y=y_k)$는, 스팸/햄으로 분류된 이메일들에 등장하는 모든 단어들 중 $w_i$가 등장한 빈도를 세어서 계산하면 된답니다 => 요건 손진희 교수님이 쓰신 부분인데 좀 헷갈림
암튼 이런 strong assumption들로 점철된 Naive Bayes이지만 굉장히 잘한다고 하는군요
Continuous $X_i$
지금까지 이산확률분포만 봤다면 연속도 다루어줘야 하지 않겠어요!
이번엔 손진희 교수님께서 가져오신, MNIST handwritten digit dataset을 보고 이야기를 해봅시다.
니스트 | TensorFlow Datasets
이 페이지는 Cloud Translation API를 통해 번역되었습니다. 니스트 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 손으로 쓴 숫자의 MNIST 데이터베이스. 나뉘다
www.tensorflow.org
니스트.. 유니스트?막이래~
얘도 아주 클래식한 classification task죠
여기서 $X_i$는 $i$번째 픽셀로 정의를 할 수가 있어요. 이 픽셀은.. 이게 grayscale 이미지이니까 real value 값을 가질 수 있겠네요+_+ 사실 엄밀히 말하면 정수를 연속형이라 할 수 있느냐 하는 그런 문제가 있을 수 있지만 잠깐 눈감아주기로 합시다
여기서도 과연 Naive Bayes를 적용할 수 있을까요?.?
아무래도
있으니까
이걸
하겠지?! ㅋㅎㅋㅎ
Common approach: assume $P(X_i | Y=y_k)$ follows a Normal (Gaussian) distribution.
톰 미첼 교수님의 lecture note에서 가져왔습니당
암튼 식은 이런데요,
\begin{equation}\label{eq3}P(X=x_i | Y = y_k) = \frac{1}{\sqrt{2\pi\sigma_{ik}^2}} \exp\left(-\frac{(x_i - \mu_{ik})^2}{2\sigma_{ik}^2}\right)\tag{2.a}\end{equation}
이때 주의할 점은 $X_i$가 아니라 likelihood $P(X=x_i | Y = y_k)$라는 점! 가우시안의 평균, 분산은 잘 알려져 있듯이 $\mu_{ik}, \sigma_{ik}^2$이고.. 그럼 우리가 테스트 데이터셋 $X^{new}$를 추정하는 식을 아래와 같이 적용해줄 수 있어요.
\begin{equation}\label{eq4}\hat{Y}\leftarrow\arg\max_{y_k}P(Y = y_k)\prod_i P(X_i^{new}|Y = y_k) \\ \hat{Y}\leftarrow\arg\max_{y_k}P(Y = y_k)\prod_i \mathcal{N}(X_i^{new}, \mu_{ik}, \sigma_{ik}^2)\tag{2.b}\end{equation}
그런데 이쯤에서 몇 가지 의문이 남아요.
- 일반적으로 $\mathcal{N}(X_i^{new}, \mu_{ik}, \sigma_{ik}^2)$는 정규분포를 따른다는 확률밀도함수의 식인데, 이걸 확률로 그대로 쓰나?
- 여기서 $\mu, \sigma$는 어떻게 구하지!?
이런 의문들.. 나만 그런가ㅋㅋㅋ
1번: 네 그렇습니다.
확통 복습이 좀 덜 된지라ㅜㅜ 제가 챗지피티한테 물어봤는데요.. 일단 우리가 일반적으로 "연속확률변수 $X$가 정규분포를 따른다"는 말의 의미가 무엇인지 생각하면 좀 더 이해하기가 쉬워집니다. 연속확률변수는 이산확률변수와 다르게 값이 정말 딱딱 떨어지지가 않아서, 사실 $P(X=3.141592)$일 확률을 구하라고 한다면 그건 엄밀히 말해 0이나 다름이 없어요.. 그래서 우리가 확률'밀도'함수의 개념을 가져오는 것입니다. "$X$의 값이 이러할 확률이 얼마인가?" 대신, X가 가질 수 있는 값의 분포를 밀도로써 나타내고 확률을 반영해 함수가 그리는 곡선 밑의 영역의 넓이가 1이 되도록 만든 게 확률밀도함수인 것이에요. 제가 수학자가 아니니까 완전 엉터리 설명일 수 있는 점 양해부탁^^ 가차없이 지적하고 고쳐주시길 바랍니다.. 그래서 블로그 이름이 TEACHME.md임..
여기서도 마찬가지입니다. $P(X=x_i|Y=y_k)$는 likelihood로 불리지만 이건 엄연히 probability와 다른 개념이에요. 챗지피티는 이런 표현을 쓰네요:
When we say the density is proportional to the "likelihood" of observing the data given the parameters, we mean that the value of the PDF at a given data point, given certain parameters (mean and variance for a normal distribution), is a measure of how "likely" it is to observe that data point under those parameters. In Bayesian terms, this can be thought of as how well the data "fits" with certain parameters.
아휴 똑똑해라.. 얘, 너가 나 대신 학교 다녀라..
여기서 parameter란 $\mu, \sigma$ 이 둘을 말하구요, 평균과 분산이 이러할 때 $X$가 대충 이런 식으로 분포하더라~ 하는 게 밀도지 이 값이 나타날 확률이 이거다~는 다른 의미입니다. 헷갈려하지 말기~~
그래서 가우시안 분포의 확률밀도함수를 likelihood로 사용할 수 있는 거예요><
2번. 그렇잖아도 다음 슬라이드에 설명돼있음ㅋㅎ
\begin{equation}\label{eq5}\hat{\mu}_{ik}= \dfrac{1}{\sum_j \delta(Y^j=y_k)}\sum_jX^j_i\delta(Y^j=y_k) \\ \hat{\sigma}_{ik}^2= \dfrac{1}{\sum_j \delta(Y^j=y_k)}\sum_j(X^j_i-\hat{\mu}_{ik})^2\delta(Y^j=y_k) \tag{2.c}\end{equation}
아따 델타 함수 왕많이 나오네 진짜... $\delta(\textbf{x})=1$ if $\textbf{x}$ is true, 0 otherwise... 뭐 그런 의미구요. \ref{eq5}의 의미가 뭐 같나요? 뭐긴 뭐야 평균이지.. $\sum_j \delta(Y^j=y_k)$는 라벨이 $y_k$인 것들의 개수일 테구요, $\sum_j X^i_j \delta(Y^j=y_k)$는 이에 해당하는 $X$값들의 합일 테구요. 그럼 $X$값들의 합을 개수로 나눈 거니까 평균이지 뭐... 분산은 평균으로 구하는 거니까 뭐... 이건 당연히 MLE로 구한거고~.~
자 그럼 뭐가 엄청 많았으니까 wrap-up을 좀 해봅시다. 우리가 지금 나이브 베이즈 하면서 파라미터 추정해주는 게 너무 많이 나왔걸랑...
우리가 학습하려고 하는 posterior 확률이 제일 중요하고, 이를 계산하는 데 필요한 두 가지 요소는,
- prior, a.k.a class priors, $P(Y=y_k)$: 이건 손진희 교수님 피피티엔 그냥 $\text{#}(y_k)/\text{#(training samples)}$
- likelihood, a.k.a class conditionals, $P(X|Y)$: 가우시안 확률밀도함수
- $\hat{\mu}_{ik}$: MLE로 추정한 평균
- $\hat{\sigma}_{ik}^2$: MLE로 추정한 분산
해치웠나?!
음음 이걸 적용한 예시를 한 번 봐볼까요 손진희 교수님은 Gender를 label로 하는 데이터셋에서 체중과 신장을 가지고 분포를 그리셨네요! 저는 이걸 미첼 교수님이 그리신 대로 한번 그려보겠움
ㅋㅋ 마우스로 쓴 글씨 치고 꽤 잘 쓴 듯..
2023년 2월 28일 기준 대한민국 통계입니다. 파란색이 남성, 빨간색이 여성이에요. $P(W|Y=\text{Female})$과 $P(W|Y=\text{Male})$, $P(H|Y=\text{Female})$과 $P(H|Y=\text{Male})$ 모두 가우시안 분포를 따른다고 가정하고 가우시안 분포를 그린 후, 이 분포를 바탕으로 등고선(?)처럼 contour를 그리면 주황색/연두색 타원처럼 되겠지요. 그러면 두 원의 교점을 기준으로 decision surface을 설정할 수 있는데, 이게 바로 분류의 boundary가 되는!!
사실 저렇게 깔끔하게 그려지는 게 일반적인 경우는 아니래요ㅋㅋ 근데 뭐 늘 그렇듯.. 특정 조건 하에 저게 linear한 경우가 있다나? 그 조건은 바로.. class, 즉 label $y$에 상관없이 가우시안 분포의 분산이 같으면 linear decision surface라고 하는군요! 저 예시에 따르면 빨간색과 파란색의 너비가 같아야 한다는 것임ㅇㅇ
암튼 이 boundary surface 개념에서 출발해서 다음 포스트에서 다룰 것이 바로 logistic regression입니다. 이건.. 곧 업로드 예정.. 어유 진도 빠르다빨라~.~
20000총총
'coursework > Machine Learning & Deep Learning' 카테고리의 다른 글
SP24) Bagging & Boosting (Ensemble) (0) | 2024.05.25 |
---|---|
SP24) Bias-Variance Tradeoff (1) | 2024.04.01 |
SP24) Linear Regression II (1) | 2024.03.31 |
SP24) Linear Regression 1 (1) | 2024.03.28 |
SP24) Naive Bayes Classifier 1 (0) | 2024.03.20 |