Classification문제 : class를 예측하는 것
linear regression을 확장해서 분류 문제에 쓰겠다 ← sigmoid 함수를 추가해서 확장
logistic function으로 sigmoid function 함수를 사용함
⇒ 모든 x값에 대해 0~1 사이의 값과 맵핑됨.
왜 sigmoid function 인지? 시그모이드 함수를 미분한 형태가 굉장히 단순하다 !
g’(x) = g(x)(1-g(x))
Likelihood of β
linear regression의 error function에 해당하는 함수가 여기선 likelihood, 즉 샘플들의 Likelihood를 높이는 방식을 찾겠다
likelihood를 최대화하기 위해서 gradient ascent를 사용하겠다!
그래디언트 디센트와의 차이점은 얘는 값의 최댓값을 찾는다는 점이고, 파라미터 β 를 업데이트할 때 + 를한다는 점이다
iterative optimization algorithm for finding local maxima
ℓ(β)= log L(β)
파라미터를 반복적으로 업데이트하는 방법 말고 더 빨리 찾는 방법
Find a zero of a function
tangent 라인을 계속 따라가면서 x축과의 교차점(x-intercept)찾음 ⇒ 함수를 0으로 만드는 지점과 가까워진다
A fast way to find f(β )=0
So, use it to find ℓ’(β) = 0 ⇒ likelihood 함수를 미분한 값= 0을 찾는 걸 사용하자
ℓ의 Maxima 는 ℓ’(β) = 0 을 의미함 ⇒ 이걸 찾는데 Newton’s method를 이용하자
Newton’s method: c = b - f(b) / f’(b)
행렬에 위 식을 적용하기 위해서 계산과정에 Hessian Matrix가 쓰인다
장점) 빠른 수렴
단점) Hessian Matrix를 구하는건 비싸다
discriminative는 해당값 p(y|x)을 직접적으로 찾는다. 따라서 경계 decision boundary를 잘 찾는 것이 중요
generative는 먼저 각 클래스에 대한 모델을 정의하고 그 다음 p(y|x)를 계산한다
주어진 샘플에 대해 seabass vs salmon을 구분할 때 Posterior probability(사후확률) 계산
p(X | y = 1): seabass의 밝기(X)에 대한 확률 밀도 함수
p(X | y = 0): salmon의 밝기(X)에 대한 확률 밀도 함수
두 조건부 확률 밀도를 비교하는 것만으로는 classification 문제를 해결하기에 충분하지 않음
농어와 연어의 사전 확률(Prior)이 다르다면, 단순히 밝기 밀도를 비교하는 것만으로는 정확한 분류가 불가능. 예를 들어, 농어가 연어보다 훨씬 많이 출현한다면, 밝기 밀도가 같더라도 농어일 확률이 더 높아질 수 있다.
We need Prior !
조건부 확률 P(A|B)P(B) = P(B|A)P(A) 라는걸 기억하자
베이즈 룰을 적용하여 posterior probabilities를 구함
p(y = 1 | X) = p(X | y = 1)p(y=1) / p(X)
예측을 하기 위해선,
p(y|x) = p(x|y)p(y) / p(x) by Bayse rule
Posterior distribution
p(x) = p(x | y = 1)p(y = 1) + p(x | y = 0)p(y = 0)
p(y | x)의 최댓값을 구하는 것!
💡Q1. How is the linear regression transformed into logistic regression? For what purpose?
Use sigmoid function for the classification
Q2. Why is the gradient ascent algorithm used in logistic regression instead of gradient descent?
The goal is to increase the likelihood of each point being produced from the distribution
Q3. Explain the concept of generative learning algorithm (comparing to discriminative learning algorithm)
Not directly compute p(y|x) instead. Compute it through the likelihoods (p(x|y)) and the prior (p(y))
generative learning algorithm의 예시
p(x|y)가 multivariate normal distribution을 따른다는 가정이 필요
multivariate normal distribution은 뮤(평균), 공분산(covariance) 값에 따라 분포가 달라진다.
뮤(평균) : 분포의 위치를 정함
공분산 행렬(표준편차)의 값에 따라 분포의 타원형 모양이 결정되며, 이는 두 변수의 상관관계에 따라 기울기가 달라집니다.
x|y = 0 ~ N(m,q)
x|y = 1 ~ N(m,q) 각각 정규 분포를 따른다.
Step1: 파라미터 값을 구한다
Step2: testing data가 주여졌을 때 대입해서 p(x|y=1) , p(x|y=0), p(y)를 구함
Step3: Posterior probability 확률 계산 ⇒ p(y = 0|x), p(y = 1|x) 둘 중에 더 큰걸 사용하거나 threshold 정해서 그거보다 큰 값을 택하는 걸로해도 됨
관찰 1: 두개의 가우시안은 같은 모양과 방향의 contour를 갖는다 ⇒ covariance matrix를 공유하기 때문
관찰 2: Straight line ⇒ decision boundary
관찰 3: 만약 data point가 경계의 한 side에 있다면 predict = 1, 그렇지 않으면 predict = 0
같은 데이터셋에 대해서 다른 decision boudary를 리턴
GDA는 관찰data가 정규분포를 따른다는 가정을 할 수 있을 때만 사용 가능 ⇒ 가정할 수 있다면 Logistic regression보다 더 빠른 메소드(반복 없음, 평균과 공분산만 계산하면 됨)
하지만 보통은 가정하기 어려움 ⇒ 실제론 임의의 data set을 사용할 경우엔 Logistic regression 사용
단순하지만 강력한 분류 모델 ⇒ text classification에 좋은 방법
x: discrete-valued (NOT continuous, real-valued)
feature vector
50만개의 단어 사전에서 이메일에 해당 단어가 나타났으면 1, 그렇지 않으면 0
50만개의 feature vector에 대해서 2^50k -1 개의 파라미터를 고려해야함.
(-1을 해주는 이유는 다 0일때, 즉 아무단어도 포함되지 않는 경우를 빼줌)
너무 많은 파라미터를 피하기 위해서 generative algorithm을 취함 ⇒ p(x|y) 모델링
여기엔 가정이 필수적 x’s are conditionally independent given y
특정 단어가 이메일에 나타날 확률은 독립적이다 ⇒ 다른 단어가 이메일에 나타날 확률에 영향을 미치지 않는다
이 가정에 기반해서 Naive bayes classifier를 사용할 수 있음
연속적으로 일어나는 사건을 ,(콤마) 로 표현
p(x1,x2,…,x50000 | y)
p(x1|y)p(x2|y,x1) … p(x50000 | y,x1,…,x49999) By chain rule
p(x1|y)p(x2|y)p(x3|y) …p(x50000|y) By Naive Bayes assumption
⇒ 각각의 x는 독립적이여서 condition을 정의하지 않아도 됨. 즉, given y만 남는다.
장점: 단순하기 때문에 적용하기 쉬움, no gradient ascent ⇒ efficient
spam ⇒ y=1, normal ⇒ y=0
p(xi = 1 |y = 1) : i번째 단어가 spam에 나타날 확률
p(xi = 1 |y = 0) : i번째 단어가 normal에 나타날 확률
p(y = 1): 스팸이 몇개인지, 노멀이 몇개인지 비율
예) “ewha” 단어가 몇번이나 나타났는가?
구간화 Discretization ⇒ 버킷을 만들어서 구간화
연속적 데이터(예: 키, 나이와 같이 연속적인 수치형 데이터)가 주어질 경우 이를 이산형(범주형)으로 변환하는 과정이 필요
확률이 0 이되는 것을 피하기 위한 방법
의도적으로 분자(numerator)에 1을 더하고, 분모에는 K를 더함
K는 x가될 수 있는 값들의 개수
예시에선 x가 스팸, 노멀 두가지 경우가 가능해서 2를 더해줌
각 단어들에 +1을 해주면 전체 분모는 개수만큼 더해진다
이메일이 포함하고 있는 단어만 보겠다 ⇒ feature vector가 4개의 단어로만 구성, 각 단어의 index값 포함
n_i = |V| i번째 이메일에 포함된 단어의 개수
i : 이메일 자체의 인덱스
j : 단어에 대한 인덱스
Q1:Do GDA and Naïve Bayes have in common? Explain.
Both try to find the distribution of each class parameterized by
mean and covariance (or the fraction of each word appearing in
spam or normal emails) first and compute p(y|x)
Q2: What is Laplace Smoothing? Why is it needed?
Good way to handle unseen data (not in observed data)
In this way, we can assign tiny probability (closer to 0) to such ca
ses rather than 0/0