Naive Bayes의 NLTK 구현은 그렇게하지 않지만 NaiveBayesClassifier의 예측과 문서 길이의 분포를 결합 할 수 있습니다. NLTK의 prob_classify 메소드는 문서의 단어, 즉 P (cl | doc)가 주어진 클래스에 대한 조건부 확률 분포를 제공합니다. 당신이 원하는 것은 P (cl | doc, len)입니다 - 문서의 단어와 길이에 주어진 클래스의 확률. 우리는 몇 가지 더 독립 가정을한다면, 우리는 얻을 :
P(cl|doc,len) = (P(doc,len|cl) * P(cl))/P(doc,len)
= (P(doc|cl) * P(len|cl) * P(cl))/(P(doc) * P(len))
= (P(doc|cl) * P(cl))/P(doc) * P(len|cl)/P(len)
= P(cl|doc) * P(len|cl)/P(len)
이미 그렇게 남아있는 모든이 P를 추정하는 것입니다, prob_classify에서 첫 번째 용어있어 (LEN | CL)과 P (LEN) .
문서 길이를 모델링 할 때 원하는만큼 멋지게 꾸밀 수 있지만 시작하려면 문서 길이의 로그가 정상적으로 배포되었다고 가정하면됩니다. 각 클래스 및 전체에서 로그 문서 길이의 평균 및 표준 편차를 알고 있으면 P (len | cl) 및 P (len)를 계산하기 쉽습니다.
여기에 P (LEN)을 추정에 관한 것 중 하나 개 방법 : 기억
from nltk.corpus import movie_reviews
from math import sqrt,log
import scipy
loglens = [log(len(movie_reviews.words(f))) for f in movie_reviews.fileids()]
sd = sqrt(scipy.var(loglens))
mu = scipy.mean(loglens)
p = scipy.stats.norm(mu,sd)
유일한 까다로운 일이 로그 - 길이보다는 길이에 걸쳐 분포라고하고는 지속적으로 유통 있다고. 그래서, 길이 L의 문서의 확률은 다음과 같습니다
p.cdf(log(L+1)) - p.cdf(log(L))
조건부 길이 분포는 각 클래스의 문서의 로그 길이를 사용하여 같은 방법으로 추정 할 수있다. 그러면 P (cl | doc, len)에 필요한 것을 얻을 수 있습니다.
팁 주셔서 감사합니다! – Javaaaa