1. Naive Bayes
1.1. Remind
- Lecture 5 에서 정리했던 내용을 그대로 복습하게 되면서, 추가적으로 말 못했던 내용도 추가해서 포스팅하고자 한다.
- 우리는 앞서 GDA에선 feature vector x가 연속적이였다.
- 이번엔 이산값을 가질 때의 학습 알고리즘에대해 알아보자.
- 머신러닝을 이용하여 이메일 스팸 필터를 만든다고 생각해보자.
- 즉, 메시지를 분류하여 스팸인지 스팸이 아닌지 판단하려고 한다.
- 스팸 필터를 구성하기 위해 스팸 또는 스팸이 아닌 것으로 라벨이 지정된 이메일로 구성된 train dataset이 있다고 가정하자.
- 이메일을 표현하는 데 사용되는 feature x를 저정하여 스팸 필터를 설계할 것이다.
- email을 Dictionary에 있는 단어 수와 동일
한 길이의 특지 벡터로 표현할 것이다.
- 예를 들어, 이메일이 사전에서 j번째 단어를 포함하고 있으면 x[j] = 1, 그렇지 않으면 0 으로 설정한다.
- 다음 그림을 보면 이해하기 쉬울것이다.
- 이제 generative model을 구축하고자 한다.
- p(x | y)를 모델링해야한다.
- 만약 우리가 50,000개로 이루어진 vocabulary를 가지고 있다면
- 이는 마치 2^50000개의 가능한 결과에 대한 multinomial distribution으로 모델링한다고 가정하면,
- 2^50000 -1 차원의 parameter vector을 갖게 된다.
- 이는 너무 많은 parameter를 요구한다.
- 이를 해결하고자 p(x|y)를 모델링하기 위해 매우 강한 가정을 세워보자.
- x[i]가 y를 기준으로 전부 독립이라고 가정하자. (이 가정을 Naive Bayes, NB가정)
- 이러한 Naive Bayes를 이용하여 생성된 알고리즘을 Naive Bayes Classifier라고 한다.
- 예를 들어, y = 1이 스팸 이메일을 의미한다고 해보자.
- "buy"를 2087번쨰 단어, "price"를 39831번째 단어라고 가정해보자.
- NB가정이라면 다음과 같은 결과가 나온다.
P(x[2087] | y) = p(x[2087] | y ,x[39831])
- 이러한 사실을 바탕으로 joint likelihood를 나타내면 다음과 같아진다.
- MLE를 만족하는 파라미터들을 구해보면 다음과 같다.
1.2. test set time
- 이러한 Naive Bayes가 test set에서 어떻게 작동하는지 알아보자.
- x가 주어졌을때, y=1이 발생할 확률을 구하는 것과 같다.
- 해당 식을 보게 되면 한가지 단점에 대해서 볼 수 있게 된다.
- 만약에 이메일에 사전에 없는 단어인 'L0v3'라는 단어가 들어가 있다고 해보자.
- 이를 간단하게 35000 번째 단어라고 정의하고 확률을 계산하면 다음과 같아진다.
- 이메일이 스팸인지 아닌지에 상관없이 'L0v3'가 없었기 때문에 이에 대한 확률은 무조건 0 이된다.
- 이를 토대로 testset에 돌리게 되면 다음과 같은 결론을 도출한다.
- 즉, 통계론적 모순이 생기게 된다.
- 이를 해결하기 위해 나오게 된 기법이 Laplace smoothing이다.
1.3. Laplace Smoothing
- Laplace Smoothing을 이해하기 위해서 다음과 같은 예제를 같이 확인 해보자.
- A와 B,C,D,E라는 축구팀이 있다고 생각해보자.
- 1번째 경기 : A vs B ==> A가 Lose
- 2번째 경기 : A vs C ==> A가 Lose
- 3번째 경기 : A vs D ==> A가 Lose
- 4번째 경기의 A의 승률을 물어보는 문제가 주어졌을때 어떻게 답할 수 있을까?
- 일단 승률을 계산하는 식은 다음과 같다.
(A가 이긴 횟수) / ( A가 이긴횟수 + A가 진 횟수)
- 이와 같은 식을 토대로 A의 승률은 0이 나온다는 것을 알 수있다.
- 근데, A가 4번째 경기에서 이길수도 있는거 아닌가? 즉, 통계론적 모순이 발생하게 된다.
- Laplace Smoothing에선 "이길수도 있는거 아닌가?" 또는 반대로 "질수도 있는거 아닌가?"라는 만약의 상황을 고려하게 된다.
- 이를 반영하기 위해 "A가 이긴 횟수"+1 , "A가 진 횟수" + 1 을 하게 된다.
- 즉, 다시 Laplace Smoothing을 적용한 승률을 계산하는 식을 보면 다음과 같다.
- (A가 이긴 횟수 + 1) / ( A가 이긴횟수 + 1 + A가 진 횟수 + 1) = 1 / (0+1+3+1) = 1 / 5
- 즉, 1/5 가 나오게 된다.
- 상대적으로 Laplace Smoothing을 적용한게 확률론적으로 적합하게 느껴진다.
- 이를 한번 naive bayes에 적용해보자.
- 만약 {1,...,k}개의 새로운 단어가 들어온다고 생각해보자.
- 그렇게 되면 , x가 i일 확률은 다음과 같이 추정할 수 있다.
- 우리는 앞서서 새로운 단어인 "L0v3"가 들어올 때 확률이 0/0 이 되는걸 봤었는데,
- Laplace Smoothing을 이용하면 다음과 같은 식이 나오게 된다.
- 막 좋은 알고리즘은 아니지만 그래도 평타는 치는 알고리즘이라고 한다.
1.4. 연속적인 data에 Naive Bayes 적용하기
- 간단하게 서술하자면, 범주화해서 이산적으로 만들어주기만 하면 된다.
1.5. Multinomial event model
-이렇게 Dictionary에 다음과 같이 index가 지정되어 있고,
- 만약 이메일이 "drugs : buy drugs now"라는 내용이 있다고 해보자.
- 기존의 naive bayes는 drugs가 몇개가 오든지 1로 표기를 하였다.(정보 손실 발생)
- 즉, 기존의 naive bayes는 output이 0또는 1이다.
- 여기서 text data에 적합하게 사용가능한 모델이 있다.
- 우선 text data의 특징은 단어의 개수가 자유롭다는 것이다.
- 어떤 이메일은 단어의 개수가 5개, 어떤이메일은 단어개수가 100개 등등 다양할 것이다.
- 이를 이용하여 기존의 "drugs : buy drugs now"라는 단어를 4차원 feature vector로 나타낼 것이다.
- x = [1600,800,1600,6200]
- 이걸 토대로 naive bayes를 해보자
- 우선 Notation부터 정의하고 가보자.
- x_j 는 {1,...,|V|} 범위의 정수를 가지며, 여기서 |V|는 Dictionary의 크기이다.
- 단어 d개의 이메일은 길이 d의 벡터로 표현 <x1,x2,...x_d>
- Multinomial event model에서는 이메일 생성 방식이 먼저 p(y)에 따라 스팸/비스팸을 결정한 후,
- x_1을 단어에 대한 Multinomial Distribution에서 선택된다고 가정한다.
- 이후 x_2는 x1과 독립적으로 동일한 Multinomial Distribution에서 선택되며,
- 이와 같은 방식으로 x_d까지 계속 반복한다.
- 따라서 메시지의 전체확률은 다음과 같이 표현된다.
- 새로운 모델의 parameter는 다음과 같다.
- 훈련 데이터가 다음과 같이 주어져 있다고 생각하자.
- 여기서 MLE를 구해주면 다음과 같다.
- Laplace Smoothing을 이용하면 다음과 같은 식이 나오게 된다.
1.6. Laplace Smoothing 부연설명
- 어휘 크기 |V| = 3: 단어는 "cat","dog","fish"로 이루어져 있다고 가정하자.
- Spam(y=1) 데이터에서는 :
-- "cat" 3번
-- "dog" 2번
-- "fish" 0번 (핵심이 됨)
- p("fish" | y = 1)을 구하면 다음과 같다.
- "fish"가 학습 데이터에 없으므로 확률이 0이 되고,
- "fish"가 포함된 이메일의 전체 확률이 0이되고, "fish"가 포함된 이메일의 전체 확률도 0이 되어버린다.
- 즉, 이메일이 스햄인지의 여부를 제대로 판단할 수 없게 된다.
- 이를 방지하고자 Laplace Smoothing에는 등장 횟수를 1을 추가하게 된다.
- "cat" : 3 + 1 = 4
- "dog" : 2 + 1 = 3
- "fish" : 0 + 1 = 1
- 분모 : 3 + 2 + 0 + 1 + 1 + 1. = 3 + 2 + 0 + |V| = 8
- 다음과 같은 확률이 나오게 된다.
2. Supprot Vector Machines(SVM)
- SVM은 다음과 같이 linear하게 classification할 수 없는 데이터를 classification하기 좋은 모델이라고 한다.
- 하지만 오늘날 Deep Learning에 비해 성능이 떨어진다고 한다.
- SVM에 대해 자세히 알기전에 Functional Margin에 대해서 알아보자.
2.1. Functional Margin
- 이진분류를 하기 위해선 Logistic Regression을 사용할 것이다.
- h(x) = g(theta^Tx) (g = sigmoid function)
- 만일 theta^Tx가 0보다 크거나 같으면 1을 반환 (h(x) >= 0.5)
- 또는 theta^Tx가 0보다 작으면 0을 반환(h(x) < 0.5)
- 만약 y_i = 1이라면 theta^Tx >> 0이기 바라며
- 만약 y_i = 0이라면 theta^Tx << 0 이기 바란다.
2.2. Geometric Margin
- 다음과 같이 빨간색과 파란색으로 되어있는 선이 binary classification을 한 모습을 볼 수 있다.
- 여기서 우리는 빨간색보단 파란색이 더 잘 분류하는 것처럼 보인다.
- 그 이유는 "빨간색 선과 데이터간의 거리의 총합"이 "파란색 선과 데이터 간의 거리의 총합" 보다 작기 때문이다.
- 즉, 파란색 선이 빨간색 선보다 geometric margin을 더 크게 갖는다.
2.3. Notation
- SVM을 이해하기 위해, 약간 바뀐 Notation에 대해서 짚고 가자.
- 우선 두 개의 클래스(y)를 분류하는 linear classifier을 설계한다고 생각해보자.
- class label : 기존의 {0,1} 대신 {-1,1}을 사용할 것이다.
-- '-1' : 하나의 클래스
-- ' 1 ' : 다른 클래스
- 기존의 모델은 파라미터 theta로 표현했다면, SVM에선 w와 b를 사용한다.
-- w : weight, b : bias
- 해당 식은 classifier의 식이다. (g : Activation function)
cf) g(z) = 1 if z >= 0, g(z) = -1 if z < 0
- 기존의 Logistic Regression과의 차이는 b를 별도로 분리해준다는 것이다.
- SVM을 이용하게 되면 Probablity를 직접 계산하지 않고 바로 -1 or +1로 결과를 반환해준다.
2.4. Functional Margin의 공식화
- 다음과 같이 Functional Margin을 나타내보자.
- 만약 y_i 가 1이라면 w^Tx + b >> 0 을 원하고,
- 만약 y_i 가 -1이라면 w^Tx + b << 0 을 원할것이다.
- 그래서 우리가 원하는건, 결국엔 gamma^hat >> 0 임을 원한다.
- 이 공식은 단일 데이터에 대한 것이고,
- 만일 다수의 데이터에 대해서 Functional Margin을 공식화 하면 다음과 같다.
- 여기서 Functional Margin을 좀 속일 수 있다.
- 그 방식은 간단히 w,b에 k배를 곱해주면 그 margin역시 k배 된다는 것이다.
- 그래서 이를 방지하고자 각각을 unit vector로 변환 해주면 쉽게 해결 가능하다. (마치 Geometric Margin을 생각하는 것과 같음)
2.5. Geometric Margin 재정의
- 밑의 식은 간단히 거리를 구해주는 것과 같다.
- 그래서 결론적으로 이 Margin이 최대한 커지는 방향으로 학습을 진행하게 된다는 것이다.
'DS Study > CS 229(Machine Learning)' 카테고리의 다른 글
[CS229] [8] Lecture 8 - Data Splits, Models & Cross-Validation (1) | 2025.01.22 |
---|---|
[CS229] [7] Lecture 7 - Kernels (2) | 2025.01.22 |
[CS229] [5] Lecture 5 - GDA & Naive Bayes (0) | 2025.01.17 |
[CS229] [4] Lecture 4 - Perceptron & Generalized Linear Model (0) | 2025.01.14 |
[CS229][3] Lecture 3 - Locally Weighted & Logistic Regression (0) | 2025.01.12 |