텍스트 데이터 분석: 문서 분류
나이브 베이즈 분류 (Naïve Bayes Classification)
조건부 확률 (Conditional Probability)
- 주어진 조건 아래에서의 확률
- B라는 조건이 주어졌을 때 A의 확률: P(A∣B)
- P("Good"∈X∣Y=1): 긍정 문장에서 "Good"이라는 단어가 나타날 확률
- P(Y=1∣"Good"∈X): "Good"이라는 단어가 나타난 문장이 긍정일 확률
베이즈 정리 (Bayes' theorem)
P(A∣B)=P(A,B)/P(B)
P(A∣B)=P(B∣A)P(A)/P(B)
나이브 베이즈 (Naïve Bayes)
- 주어진 문서 d에 대해, 이 문서가 클래스 ci에 속할 확률: P(ci∣d)
- 베이즈 정리를 적용:
P(ci∣d)=P(d∣ci)P(ci)/P(d)
- 어떤 클래스의 확률이 더 높은 지 알고 싶다면 문서의 확률 P(d)는 고려할 필요가 없음
- 문서 d를 구성하는 각 단어 w1,w2,…,wn이 조건부 독립이라고 단순하게(naïve) 가정하면:
P(w1∣ci)P(w2∣ci)…P(wn∣ci)P(ci)
사이킷런을 이용한 나이브 베이즈 분류
from sklearn.naive_bayes import BernoulliNB
model = BernoulliNB()
model.fit(x_train, y_train)
나이브 베이즈 평가
model.score(x_train, y_train)
model.score(x_test, y_test)
단어별 확률
- 단어별로 긍정 문장에 나올 확률 / 부정 문장에 나올 확률을 계산
- 로그 확률이므로 나눗셈 대신 뺄셈을 한다 (logba=loga−logb)
prob_df = pd.DataFrame({
'단어': cv.get_feature_names_out(),
'비율': model.feature_log_prob_[1] - model.feature_log_prob_[0]
})
긍부정 단어 보기
prob_df.sort_values('비율').tail(10)
prob_df.sort_values('비율').head(10)