Naive Bayesian Classifier

한상우·2025년 4월 21일

스터디

목록 보기
17/23

Naive Bayesian Classifier(NBC)

  • 순진함 + 베이즈 정리 => 분류
  • Naive (simple or idiot)

    "입력 변수 [x1,x2,...xnx_1, x_2, ... x_n]은 주어진 클라스 yy에 대해 서로 조건부 독립이다"

    라는 매우 강한 가정을 둔다.

  • Bayesian

    베이즈 정리를 기반으로 사후 확률을 최대화하는 학습 방식을 사용한다.


NBC 작동 방식

  • 분류하고자 하는 클래스(yy)가 KK개, 설명변수(xx)가 nn개인 경우를 가정하자

베이즈 정리에 따른 분류 확률

  • 입력 xx가 주어졌을 때, 클래스 yky_k가 참일 사후확률은 다음과 같다 :

    P(ykx)=P(xyk)P(yk)P(x)=P(x1,x2,,xnyk)P(yk)P(x1,x2,...,xn)P(y_k|x) = {P(x|y_k)P(y_k) \over P(x)} = {P(x_1, x_2, \cdots, x_n|y_k)P(y_k) \over P(x_1, x_2, ..., x_n)}


Chain Rule 적용

  • 결합확률 P(x1,x2,,xnyk)P(x_1, x_2, \cdots, x_n|y_k)는 Chain Rule에 따라 :

    P(x1,x2,,xnyk)=P(x1x2,,xn,yk)P(x2x3,,xn,yk)P(xnyk)P(x_1, x_2, \cdots, x_n|y_k) = P(x_1|x_2, \cdots, x_n, y_k)\cdot P(x_2|x_3, \cdots, x_n, y_k)\cdots P(x_n|y_k)


조건부 독립 가정 (Naive Assumption)

  • NBC는 설명변수 간에 조건부 독립을 가정하므로 :

    P(x1,x2,,xnyk)=P(x1yk)P(x2yk)P(xnyk)                                                                =1nP(xiyk)P(x_1, x_2, \cdots, x_n|y_k) = P(x_1|y_k)\cdot P(x_2|y_k)\cdots P(x_n|y_k) \\\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\; =\prod_1^nP(x_i|y_k)


정규화 상수 생략

  • 전체 확률 P(x)P(x)는 모든 클래스에 대해 동일하므로 분모를 생략하면 :

    P(ykx)1nP(xiyk)P(yk)P(y_k|x) \propto \prod_1^nP(x_i|y_k)\cdot P(y_k)


분류 결정

  • 각 클래스 yky_k에 대해 상대적인 확률을 계산하고,
    가장 높은 값을 가지는 클래스를 예측값으로 선택한다

    y^=arg maxk{1,,K}P(yk)1nP(xiyk)\hat y = \text{arg }\text{max}_{{k\in\{1, \cdots, K}\}} P(y_k)\cdot\prod_1^nP(x_i|y_k)


NBC의 특징

  • 좋게 말하면 : 베이즈 정리를 기반으로 한 효율적인 분류기
  • 나쁘게 말하면 : 베이지안의 철학을 흉내 낸 빈도주의 기반의 단순 분류기

조건부 독립 가정

  • 현실의 대부분 데이터는 feature 간 조건부 독립성을 만족하지 않는다

    • 이로 인해 정보 손실, 확률 왜곡, 성능 저하가 발생할 수 있다.

    • 또한 실제로는 상관 구조가 존재함에도 베이즈 정리를 기계적으로 적용한다는 점에서
      전통적인 베이지안 추론이라고 보긴 어렵다.

  • 그런데 이 단순함이 때때로 강점이 된다

    • 계산량: O(n) (각 feature 독립 계산 가능)
    • 고차원에서도 빠르고 안정적
    • 소량의 데이터만으로도 학습 가능
  • 🔁 "Column 기준 양질 전환의 법칙"

    • NBC가 단순하다는 특징은 항상 단점이 되지는 않는다.
      데이터의 특성, 목적, 자원 제약이 바뀌면
      단순함이 전략적 단순화가 되어 장점으로 전화(轉化)되기도 한다.

변수 수준에 따라 서로 다른 분포 가정

  • Naive Bayes는 모든 설명 변수가 동일한 분포를 따른다고 가정한다.

  • 하지만 현실의 고차원 데이터는 일반적으로 다양한 수준의 변수를 포함하고 있음:

    이를 하나의 NB 모델로 처리하면 "분포 가정 오류 → 확률 왜곡 → 성능 저하"로 이어질 수 있다

✅ 해결 방법

  • 혼합형 구조 (Hybrid Naive Bayes) :

    • 각 변수의 성격에 맞는 분포를 선택하여 별도로 likelihood를 계산한 뒤, log-likelihood를 합산하여 결합하는 방식
  • 전처리를 통해 분포 구조 통일 :

    • 모든 변수를 one-hot encoding → Bernoulli NB 또는 Multinomial NB로 처리

    • 연속형 변수를 구간화(discretization)하여 카테고리화 → Multinomial NB로 처리 가능


📊 변수 유형별 적절한 Naive Bayes 분포

변수 유형예시적절한 NB 변종
연속형키, 나이, 온도Gaussian NB
범주형성별, 직업, 지역Categorical NB
이진형단어 등장 여부Bernoulli NB
카운트형단어 등장 횟수, 구매 횟수Multinomial NB

해석 가능성 / 결정 경계

❗ NBC는 사후 확률을 완전히 계산하지 않는다

  • 계산의 단순화를 위해 정규화 상수는 계산하지 않고, 상대적인 확률로 클래스를 예측한다
  • 이는 사후 분포 전체를 명시적으로 다루는 전통적인 베이지안 접근과는 다소 거리가 있다

🤔 그렇다면, 정규화 상수를 계산해서 사후 분포를 완성하면 해석력이 올라갈까?

  • 이론적으로 가능하지만, NBC는 계산 단순화와 실용성을 위해 설계된 모델이다.
  • 게다가 독립 가정에 기반한 확률 구조 자체가 왜곡되어 있을 수 있으므로,
    완성된 사후 확률이라도 정확한 신뢰도가 보장되지는 않는다.

✅ 그렇다면 NBC는 해석이 불가능한 모델인가?

  • 전혀 아니다. 오히려 NBC는 구조가 단순하기 때문에 log-odds 관점에서 해석 가능성이 높다

    • 로그를 취하면 다음과 같은 형태의 선형 결합 구조가 된다:

    log(ykx)logP(yk)+ilogP(xiyk)log (y_k|x) \propto log P(y_k) + \sum_i log P(x_i|y_k)

    • 이는 로지스틱 회귀의 log-odds 구조와 유사하다:

    log-odds=β0+β1x1++βnxn\text{log-odds} = \beta_0 + \beta_1 x_1 + \cdots + \beta_n x_n

  • 따라서, 변수의 값이 바뀔 때 예측 확률이 얼마나 이동하는지를 추적할 수 있다
    (log-odds 관점에서 feature importance 분석)


❗ 단, 구조적 한계는 존재한다

  • NBC의 결정 함수는 본질적으로 선형(log-linear) 구조이기 때문에
    비선형 결정 경계를 표현할 수 없다.

  • 그러나 이것이 곧 단점만은 아니다 :

  • 단순한 결정 경계는 오히려 노이즈에 강하고 과적합 위험이 낮다.


물론 NBC를 적용했을 때 다른 모델보다 매우 우월한 성능을 보인다면 사후 분포를 계산해 분석하는 것도 의미가 있겠지만, 일반적인 NBC의 장점은 단순하고 직관적인 구조 + 꽤나 준수한 설명력이므로 baseline 모델이나 stacking ensemble의 base learner로 자주 활용된다.

Zero-Frequency 문제

  • NB에서는 모든 조건부 확률 P(xiyk)P(x_i|y_k)을 곱해서 사후 확률을 계산하는 구조이다 :

    P(ykx)P(yk)iP(xiyk)P(y_k | x) \propto P(y_k) \cdot \prod_i P(x_i|y_k)

  • 특정 클래스 yky_k에서 어떤 feature 값 xi=vx_i = v가 한번도 등장하지 않았다면 :

    P(xi=vyk)=0P(x_i = v | y_k) = 0

  • NBC는 우도를 훈련 데이터의 빈도로 추정하기 때문에,
    등장하지 않으면 → 빈도 = 0 → 확률 = 0

  • 곱셈 구조이기 때문에 하나의 확률이 0이면 전체 사후 확률이 강제로 0이 되어버림

클래스 y = "스팸"에 대해
x_i = "무료"라는 단어가 한 번도 등장하지 않았다면:

P("무료" | "스팸") = 0
→ P(스팸 | 문서) = 0
→ 스팸일 가능성 무조건 0 ← 말이 안 됨

✅ 해결책: Laplace Smoothing

  • 모든 feature 값에 최소 1회 등장했다고 가정하여 0이 되는 상황을 방지한다

    P(xi=vyk)=Nik+1Nk+VP(x_i=v|y_k) = {N_{ik} + 1 \over N_k + V}

    NikN_{ik} : 클래스 ykyk에서 xi=vx_i = v인 샘플 수
    NkN_k : 클래스 ykyk에 속한 총 샘플 수
    VV : feature xix_i의 가능한 고유값 개수

  • 전혀 등장하지 않은 값도 1로 보정하여 확률 0 → 최소값으로 유지할 수 있도록 만듦!

믿음 : 베이지안 추론의 가장 철학적인 딜레마이자, 동시에 가장 강력한 무기

  • NBC는 기본적으로 데이터에서 믿음 (사전 분포)를 설정한다. 이는 합리적인 근거를 가지고 있는 믿음이지만, 동시에 고전적인 베이지안에서 강조하는 "믿음과 데이터의 독립성"을 위배한다.

믿음은 어디서 오는가?

  1. 경험(데이터)에 기반할 수 있다

    • ✅ 합리적인 근거를 가지고 있다
    • ⚠️ 하지만 "내가 지금 다루는 데이터와 완전히 독립적인가?"를 확언하긴 어렵다
  2. 직관/주관에 기반할 수도 있다

    • ✅ 내가 구성한 믿음은 현재 데이터와 독립일 가능성이 높다
    • ⚠️ 하지만 명시적인 근거는 부족할 수 있다

믿음에 근거가 꼭 필요한가?

  • 물론 합리적인 근거가 있다면 좋다.

  • 그러나 베이지안 관점에서는 '믿음이 어떻게 바뀌는가'가 더 중요하다.

    → 사전 분포는 완벽하지 않아도 괜찮다.
    → 데이터가 충분히 들어오면, 믿음은 바뀐다.


"독립이어야 한다"는 건 딱 수학적 정의일 뿐

  • 현실에서 완전히 독립된 사전 분포는 거의 존재하지 않는다

  • 따라서, 좋은 베이지안은 이런 질문에 집중한다:

    • “이 사전 분포를 구성한 근거는 무엇인가?”
    • “내 사전 분포는 얼마나 강하게 작용하는가?”
    • “그 믿음은 데이터에 따라 얼마나 바뀌고 있는가?”

profile
개인 공부용 블로그입니다

0개의 댓글