logo

텍스트 데이터 분석: 문서 분류

텍스트 데이터 분석: 문서 분류

나이브 베이즈 분류 (Naïve Bayes Classification)

조건부 확률 (Conditional Probability)

  • 주어진 조건 아래에서의 확률
  • B라는 조건이 주어졌을 때 A의 확률: P(AB)
  • P("Good"XY=1): 긍정 문장에서 "Good"이라는 단어가 나타날 확률
  • P(Y=1∣"Good"X): "Good"이라는 단어가 나타난 문장이 긍정일 확률

베이즈 정리 (Bayes' theorem)

  • 조건부 확률의 공식:
P(AB)=P(A,B)/P(B)
  • 베이즈 정리:
P(AB)=P(BA)P(A)/P(B)

나이브 베이즈 (Naïve Bayes)

  • 주어진 문서 d에 대해, 이 문서가 클래스 ci에 속할 확률: P(cid)
  • 베이즈 정리를 적용:
P(cid)=P(dci)P(ci)/P(d)
  • 어떤 클래스의 확률이 더 높은 지 알고 싶다면 문서의 확률 P(d)는 고려할 필요가 없음
  • 문서 d를 구성하는 각 단어 w1,w2,,wn이 조건부 독립이라고 단순하게(naïve) 가정하면:
P(w1ci)P(w2ci)P(wnci)P(ci)

사이킷런을 이용한 나이브 베이즈 분류

  • 임포트
from sklearn.naive_bayes import BernoulliNB
  • 모델 만들기
model = BernoulliNB()
  • 학습
model.fit(x_train, y_train)

나이브 베이즈 평가

  • 훈련 데이터로 정확도(accuracy) 평가
model.score(x_train, y_train)
  • 테스트 데이터로 정확도 평가
model.score(x_test, y_test)

단어별 확률

  • 단어별로 긍정 문장에 나올 확률 / 부정 문장에 나올 확률을 계산
  • 로그 확률이므로 나눗셈 대신 뺄셈을 한다 (logba=logalogb)
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)

퀴즈

문제 1 / 4맞음: 0힌트: 0틀림: 0채점중: 0남음: 4

다음 중 베이즈 정리를 올바르게 나타낸 식은?

  • P(AB)=P(B)P(BA)P(A)
  • P(BA)=P(A)P(AB)P(B)
  • P(AB)=P(A)P(A,B)

퀴즈를 풀려면 대화형 기능을 불러와야 합니다.

Previous
문서 분류와 감성 분석