Recent Posts
Recent Comments
Link
Today
Total
03-12 00:39
관리 메뉴

Hippo's data

ch2지도학습_나이브베이즈 분류기 Naive bayes classifier 본문

ML(Machine Learning)/책: 파이썬 라이브러리를 활용한 머신러닝(2판)

ch2지도학습_나이브베이즈 분류기 Naive bayes classifier

Hippo's data 2023. 9. 10. 20:37
728x90

오늘은 지도학습의 분류모델 중 나이브베이즈 분류기에 대해 알아보겠습니다

 

# 나이브 베이즈 분류기 Naive bayes classifier

-> 베이즈 정리 기반 - 사전확률을 통한 사후확률 예측

특성간 독립적 가정 - 나이브한naive (소박한) 가정을 통해 복잡한 문제해결에 좋은 성능 발휘 

단점) feature간 독립적이어야함 = feature간 상관관계 없음

 

-> 선형 분류기LogisticRegression, LinearSVC - Linear support vector classifier) 보다 훈련속도빠름 but 일반화 성능 bad

-> 선형모델로 학습시간이 오래걸리는 큰 데이터셋에 나이브베이즈 모델 시도해보자!! 

 

-> scikit-learn에 구현되어있는 나이브베이즈 분류기 3개
-> GaussianNB, BernoulliNB, MultinomialNB

 

- 연속형 데이터
-> GaussianNB -> 연속형 데이터 / 고차원 데이터 주로 이용 

 

- 이산형 데이터

-> BernoulliNB -> 이진 데이터

-> MultinomialNB -> 카운트 데이터(빈도수 예- 문장에 나타난 단어 횟수)

-> BernoulliNB, MultinomialNB -> 희소한 데이터 카운트시 이용 -> 텍스트 분류/ NLP 시 주로 이용 


*** 주의) BernoulliNB, MultinomialNB에서 intercept_, coef_ 가 의미하는건 전혀 다름 
intercept_ -> 특성 카운트 수를 로그변환한 형태 (w가중치 계수 아님)
coef_ -> 클래스 카운트 수를 로그변환한 형태 (b절편 아님 )

 

-> 모델복잡도 제어 매개변수 : alpha -> 클수록 모델 복잡도 낮아짐 / 값변화따른 성능향상은 크지않음 

 

# BernoulliNB예시 -> 각 클래스 특성중 0이 아닌것 개수 셈

X = np.array([[0, 1, 0, 1],
              [1, 0, 1, 1],
              [0, 0, 0, 1],
              [1, 0, 1, 0]])
y = np.array([0, 1, 0, 1])

-> 이진 특성 가진 4개 데이터포인트 생성(클래스 0,1)

counts = {}
for label in np.unique(y):
    counts[label] = X[y == label].sum(axis=0)
print("특성 카운트:\n", counts)

-> 특성 카운트:
 {0: array([0, 1, 0, 2]), 1: array([2, 0, 2, 1])}

-> 각 클래스 반복하며 특성마다 1일 나타난 횟수 셈 

 

728x90