Я новичок в python и пытаюсь разрешить наивный алгоритм Байеса (полиномиальная модель), но в моем коде есть некоторые ошибки.
Вот алгоритм:
Вот мой код:
from collections import Counter
import nltk
from nltk.corpus import stopwords
def CountDocs(D):
D_length = X_train_counts.shape[0] # number of documents
return D_length
def ExtractVocabulary(D):
vectorizer = CountVectorizer()
X = vectorizer.fit_transform(D.data)
return vectorizer.get_feature_names()
def CountDocsInClass(c):
data_from_class = fetch_20newsgroups(subset='train', categories=[c]).data
return len(data_from_class)
def ConcatenateTextOfAllDocsInClass(data_from_class):
for i in range(0, len(data_from_class)):
if i not in stop_words:
text += word_tokenize[i]
return text
def TrainMultinomialNB(C,D):
V = D.data
N = CountDocs(D)
ClassLength = {}
prior = {}
condprob = {}
for c in C:
class_length = CountDocsInClass(c)
print(data_from_class)
ClassLength.update({c: nc})
prior.update({c:class_length/N})
textC = ConcatenateTextOfAllDocsInClass(c)
T_ct = Counter(textC)
T_ct_sum = sum(T_ct[t] + 1 for t in V)
for t in V:
if t not in condprob:
condprob.update({t: {c: (T_ct[t] + 1)/T_ct_sum}})
else:
condprob[t].update({c: (T_ct[t] + 1)/T_ct_sum})
return V, prior, condprob
TrainMultinomialNB(feature_names, twenty_train)
Данные, к которым я применяю этот алгоритм: переменная feature_names
представляет классы, а переменная twenty_train
представляет обучающий набор.x_train_counts
используется выше этого кода, и это: X_train_counts = count_vect.fit_transform(twenty_train.data)
Переменная data_from_class загружает набор данных 20 Newsgrous - набор из 12 тыс. Документов, сгруппированных по c различным категориям
Ошибки: 