LDA, QDA 그리고 Naive Bayes

sunnyboy·2024년 10월 12일

Data Mining

목록 보기
2/9

지금까지 다루었던 Logistic Regression과 다르게, 2개 이상의 클래스 중 하나로
관측값을 분류하는 상황을 생각해보자.

반응변수 YY가 가질 수 있는 값은 KK개가 있고, πk\pi_k는 무작위로 선택된 관측값이 kk번째 클래스에 속할 사전확률을 의미한다.
그리고 fk(x)=P(X=xY=k)f_k(x)=P(X=x|Y=k)kk번째 클래스에 속한 관측값의 xx에 대한 확률밀도함수(pdf)이다. 이때 Bayes Theorem에 따라 다음과 같이 표현할 수 있다.

Pk(x)=P(Y=kX=x)=πkfk(x)i=1Kπlfl(x)(4.15)P_k(x)=P(Y=k|X=x)=\frac{\pi_kf_k(x)}{\sum_{i=1}^K \pi_lf_l(x)} \quad (4.15)

Linear Discriminant Analysis (p=1)

p=1p=1, 하나의 예측 변수가 있는 상황을 생각해보자. fk(x)f_k(x)(4.15)에 대입하여 Pk(x)P_k(x)를 구하려고 하는데, 그 전에 몇 가지 가정이 필요하다.
우선 fk(x)f_k(x)를 가우시안 분포라고 가정해보자.

fk(x)=12πσke12σk2(xμk)2(4.16)f_k(x)=\frac{1}{\sqrt{2\pi}\sigma_k}e^{-\frac{1}{2\sigma^2_k}(x-\mu_k)^2} \quad (4.16)

여기서 μk\mu_kσk2\sigma^2_kkk번째 클래스에 대한 평균과 분산이다.
그리고 모든 클래스에서의 분산이 같다고 가정하자. (즉, σ12=...=σk2=σ2\sigma^2_1=...=\sigma^2_k=\sigma^2)

이때

Pk(x)=πk12πσe12σ2(xμk)2l=1Kπl12πσe12σ2(xμk)2(4.17)P_k(x) = \frac{\pi_k\frac{1}{\sqrt{2\pi}\sigma}e^{-\frac{1}{2\sigma^2}(x-\mu_k)^2}}{\sum_{l=1}^K\pi_l\frac{1}{\sqrt{2\pi\sigma}}e^{-\frac{1}{2\sigma^2}(x-\mu_k)^2}} \quad (4.17)

Bayes ClassifierPk(x)P_k(x)를 최대로 하는 클래스에 관측치 X=xX=x를 할당한다.
πk\pi_kkk번째 클래스에 속할 사전확률(Prior)를 나타내며, (4.17)에 로그를 취하면 다음과 같은 식이 도출된다.

δk(x)=xμkσ2μk22σ2+log πk(4.18)\delta_k(x)=x\frac{\mu_k}{\sigma^2}-\frac{\mu^2_k}{2\sigma^2}+log\ \pi_k \quad (4.18)

로그함수는 Monotonic 이므로 δk(x)\delta_k(x)를 최대로 하는 클래스에 X=xX=x를 할당하는 것과 같다.

Bayes decision boundary

K=2K=2 이고 π1=π2\pi_1=\pi_2일 때, Bayes Classifier2x(μ1μ2)>μ12μ222x(\mu_1-\mu_2)>\mu^2_1-\mu^2_2 인 경우 관측치를
클래스 1에, 그렇지 않으면 클래스 2에 할당한다.
이때의 베이즈 결정 경계δ1(x)=δ2(x)\delta_1(x)=\delta_2(x)인 지점이며, 이를 통해 다음과 같은 결과를 도출할 수 있다.

x=μ12μ222(μ1μ2)=μ1+μ22(4.19)x=\frac{\mu^2_1-\mu^2_2}{2(\mu_1-\mu_2)}=\frac{\mu_1+\mu_2}{2} \quad (4.19)

위 그림을 보면, 두 개의 가우시안 분포 함수 f1(x)f_1(x)f2(x)f_2(x)이 그려져 있다.
이 함수들은 두 개의 서로 다른 클래스를 나타낸다. 함수가 겹쳐져 있으므로 관측값 X=xX=x이 주어졌을 때 x<0x<0 인 경우 클래스 1에, 그렇지 않으면 클래스 2에 할당하는 것이다.

실제로 fk(x)f_k(x)가 정규 분포를 따른다고 하더라도 Bayes Classifier를 적용하려면 π1,...πk\pi_1,...\pi_k
μ1,...,μk,\mu_1,...,\mu_k, 그리고 σ2\sigma^2를 추정해야 한다. 구체적으로는 다음과 같은 추정값들이 사용된다.

π^k=nkn,μ^k=1nki:yi=kxi,σ^2=1nkk=1Ki:yi=k(xiμ^k)2(4.20)\hat\pi_k=\frac{n_k}{n},\quad \hat\mu_k=\frac{1}{n_k}\sum_{i:y_i=k}x_i, \quad \hat\sigma^2=\frac{1}{n-k}\sum_{k=1}^K\sum_{i:y_i=k}(x_i-\hat\mu_k)^2 \quad (4.20)

여기서 nn은 총 train observation의 수이고, nkn_kkk번째 클래스의 train observation의 수이다. 위 추정치들을 (4.18)에 대입하면 판별 함수(determinant function)는 다음과 같다.

δ^k(x)=xμ^kσ^2μ^k2σ^2+log π^k(4.21)\hat\delta_k(x)=x\frac{\hat\mu_k}{\hat\sigma^2}-\frac{\hat\mu_k}{2\hat\sigma^2}+log\ \hat\pi_k \quad (4.21)

위 Classifier의 이름에 'linear'가 들어가는 이유는 판별 함수가 xx에 대한 선형 함수이기 때문이다.


위 그림은 각 클래스에서 20개의 무작위 관측값을 나타낸 히스토그램이다. LDA를 구현하기 위해 (4.20)과 (4.21)을 사용하여 추정치들을 구한 후 (4.21) 이 최대가 되는 클래스로 관측값을 할당하는 경계를 계산했다.
그림을 보면 LDA 결정 경계가 베이즈 결정 경계보다 약간 왼쪽에 있다는 것을 보여준다.

많은 테스트 데이터를 생성하여 시뮬레이션된 두 가지 분류기의 오류율을 보면 베이즈는 10.6%, LDA는 11.1%으로 LDA Classifier가 잘 작동하고 있다는 것을 알 수 있다.

정리하면, LDA Classifier는 각 클래스의 관측값이 클래스 별 평균과 공통 분산을 가지는 정규 분포를 따른다고 가정하고 이것을 Bayes Classifier에 대입하여 얻는다.

Linear Discriminant Analysis (p > 1)

이제 2차원 이상의 예측값을 갖는 다변량 데이터를 생각해보자.
우선 fk(x)=1(2π)p/2Σk1/2e12(xμk)TΣk1(xμk)f_k(x)=\frac{1}{(2\pi)^{p/2}|\Sigma_k|^{1/2}}e^{-\frac{1}{2}(x-\mu_k)^T\Sigma_k^{-1}(x-\mu_k)} 와 같이 다변량 가우시안 분포를 따른다고 가정하자.
이때 μk\mu_kp×1p\times1 평균 벡터, Σ\Sigmap×pp\times p 공분산 행렬이다.

p=1p=1 일 때와 비슷하게, 판별 함수는 다음과 같다.

δk(x)=xTΣ1μk12μkTΣ1μk+log πk(4.22)\delta_k(x)=x^T\Sigma^{-1}\mu_k-\frac{1}{2}\mu_k^T\Sigma^{-1}\mu_k+log\ \pi_k \quad (4.22)

위 식은 (4.18)을 다차원으로 확장한 형태이다.


위 그림 속 세 개의 타원은 각 클래스에 대해 95% 확률을 포함하는 영역을 나타낸다. 점선은 베이즈 결정 경계로, δk(x)=δl(x)\delta_k(x)=\delta_l(x)을 만족하는 xx들의 집합이다. 즉,

xTΣ1μk12μkTΣ1μk=xTΣ1μl12μlTΣ1μl(4.23)x^T\Sigma^{-1}\mu_k-\frac{1}{2}\mu_k^T\Sigma^{-1}\mu_k=x^T\Sigma^{-1}\mu_l-\frac{1}{2}\mu_l^T\Sigma^{-1}\mu_l \quad (4.23)

klk\neq l 인 경우이다. 이때 log πklog \ \pi_k는 세 클래스가 동일한 train observation 수를 갖기 때문에 소거되었다.

또다시 LDA Classifier를 구하기 위해 π1,...πK\pi_1,...\pi_Kμ1,...,μK,\mu_1,...,\mu_K, 그리고 Σ\Sigma를 추정해야 하고, 1차원에서와 같은 방법으로 다음과 같은 판별 함수를 구하게 된다.

δ^k(x)=xTΣ^1μ^k12μ^kTΣ^1μ^k+log π^k(4.24)\hat\delta_k(x)=x^T\hat\Sigma^{-1}\hat\mu_k-\frac{1}{2}\hat\mu_k^T\hat\Sigma^{-1}\hat\mu_k+log\ \hat\pi_k \quad(4.24)

1차원과 마찬가지로 Determinant function이 xx에 대한 Linear function이라는 것이
LDA Classifier의 이름에 Linear가 들어가는 이유이다.

Quadratic Discriminant Analysis

이차 선형 판별 분석(QDA)에서도 LDA와 같이 각 클래스의 관측치들이 다변량 정규분포에서 나왔다고 가정한다. 다만 다른 점은 각 클래스의 공분산 행렬이 다르다고 가정하는 것이다. (즉, XN(μk,Σk)X\sim N(\mu_k,\Sigma_k))

따라서 π1,...πK\pi_1,...\pi_Kμ1,...,μK,\mu_1,...,\mu_K,에 더해 Σ1,...,ΣK\Sigma_1,...,\Sigma_K까지 추정해야 한다. 이때 판별 함수의 형태는 다음과 같다.

δ^k(x)=12(xμk)TΣ^k1(xμ^k)12log Σ^k+log π^k(4.25)\hat\delta_k(x)=-\frac{1}{2}(x-\mu_k)^T\hat\Sigma_k^{-1}(x-\hat\mu_k)-\frac{1}{2}log \ |\hat\Sigma_k|+log \ \hat\pi_k \quad (4.25)

QDA Classifier 역시 추정값들을 (4.25)에 대입해 최댓값을 갖는 관측치 X=xX=x를 할당한다. (4.22)와 달리 판별 함수가 xx의 이차 함수로 나타나기 때문에 이름에 Quadratic이 들어간다.

그렇다면 왜 공통 공분산 행렬을 사용하는지 여부가 중요할까? 다시 말해 LDAQDA 보다 선호해야 할 이유는 무엇일까?

그 답은 편향-분산 트레이드오프(Bias-Variance Trade-Off)에 있다.
pp개의 예측값이 있을 때, 공분산 행렬을 추정하려면 p(p+1)/2p(p+1)/2개의 parameter를 추정해야 하고, QDA는 KK개의 클래스 각각 추정하므로 Kp(p+1)/2Kp(p+1)/2개의 parameter를 추정해야 한다.

결과적으로 LDAQDA에 비해 훨씬 덜 유연한 분류기이기 때문에 분산은 훨씬 낮다.

하지만 여기서 Trade-Off가 발생하는데, 만약 LDAKK개의 클래스들이 공통 공분산 행렬을 갖는다는 가정이 맞지 않다면 LDA는 높은 편향을 갖게 될 것이다.

대체로 훈련 데이터가 상대적으로 적고 분산을 줄이는 것이 중요할 경우 LDA가 좋은 선택이 될 수 있다.

반면 훈련 데이터가 매우 많아서 분산이 큰 문제가 되지 않거나 KK개의 클래스가 공통된 공분산 행렬을 갖는다는 가정이 성립하지 않는 경우에는 QDA를 사용하는 것을 권장한다.

Naive Bayes

이번에는 베이즈 정리를 이용하여 자주 사용되는 Naive Bayes Classifier를 소개하겠다.

지금까지 사후 확률 Pk(x)P_k(x)π1,...,πK\pi_1,...,\pi_Kf1(x),...,fK(x)f_1(x),...,f_K(x)로 표현했는데, 실제로 이 공식을 사용하려면 π1,...,πK\pi_1,...,\pi_Kf1(x),...,fK(x)f_1(x),...,f_K(x)의 추정값이 필요하다.

사전 확률 π1,...,πK\pi_1,...,\pi_K 를 추정하는 것은 KK번째 클래스에 속하는 훈련 샘플의 비율로 간단하게 추정할 수 있지만, f1(x),...,fK(x)f_1(x),...,f_K(x)를 추정하는 것은 매우 복잡한 일이다.

그래서 LDAQDA에서는 pdf가 정규 분포라는 가정을 세웠지만, 나이브 베이즈에서는 조금 더 강력한 가정을 세운다.

  • 각 클래스 내에서 pp개의 예측 변수들이 서로 독립적이다.
  • fk(x)=j=1pfkj(xj).f_k(x)=\prod_{j=1}^pf_{kj}(x_j). 이때, fkj(x)f_{kj}(x)kk번째 클래스에서 jj번째 예측 변수의 밀도 함수이다.
  • 가우시안 나이브 베이즈는 각 Σk\Sigma_k가 대각 행렬이다.

판별 함수는 다음과 같다.

δk(x)log[j=1pfkj(xj)]=12j=1p[(xjμkj)2σkj2+log σkj2]+log πk\delta_k(x)\propto log[\prod_{j=1}^pf_{kj}(x_j)]=-\frac{1}{2}\sum_{j=1}^p[\frac{(x_j-\mu_{kj})^2}{\sigma_{kj}^2}+log\ \sigma_{kj}^2]+log \ \pi_k

이 방법은 정성적(qualitative) 및 정량적(quantitative) 변수가 섞인 경우에도 사용할 수 있다. 만약 xjx_j가 범주형 변수라면 해당 부분의 밀도 함수 fkj(xj)f_{kj}(x_j)를 확률 질량 함수로 대체하면 된다.

위 가정들이 왜 강력한걸까? 기본적으로 pp-차원 밀도 함수를 추정하는 것이 어려운 이유는 각 예측 변수의 주변 분포뿐만 아니라 예측 변수 간의 결합 분포까지 고려해야 하기 때문이다. 하지만 우리는 예측 변수들이 서로 독립적이라고 가정했다.

과연 정말로 pp개의 예측 변수들이 클래스 내에서 독립적이라고 할 수 있을까?
대부분의 상황에서 그렇지 않지만, 이 가정이 편의를 위해 세워진 것을 감안하더라도 실제로 상당히 좋은 결과를 가져오는 경우가 많다.

특히 nnpp에 비해 충분히 크지 않아 각 클래스 내에서 예측 변수의 결합 분포를 효과적으로 추정하기 어려운 경우가 그렇다. 실제로 결합 분포를 추정하려면 굉장히 많은 데이터를 필요로 하기 때문에, 나이브 베이즈는 다양한 상황에서 좋은 선택이 될 수 있다.

비록 나이브 베이즈의 가정에서 약간의 편향이 발생할 수는 있으나 분산을 적절히 줄여
Bias-Variance Trade-Off를 통해 괜찮은 분류기를 만들 수 있다.

profile
Data Analysis, ML, Backend 이것저것 합니다

0개의 댓글