J'ai un tas de documents regroupés en environ 350 classes. J'essaie de construire un modèle multinomial TF-IDF pour prédire la classe d'un nouveau document. Tout semble fonctionner correctement sauf que la prédiction de test ne prend qu'une valeur (même si je lance le test sur des milliers de documents). Qu'est-ce que je rate?MultinomialNB() prédisant la même catégorie pour tous les documents de test
Voici le code correspondant:
stop_words = set(stopwords.words('english'))
tokenizer = RegexpTokenizer(r'\w+')
stemmer = SnowballStemmer("english")
count_vect = CountVectorizer()
tfidf_transformer = TfidfTransformer(norm='l1', use_idf=True, smooth_idf=False, sublinear_tf=False)
clf = MultinomialNB()
mycsv = pd.read_csv("C:/DocumentsToClassify.csv", encoding='latin-1')
Document_text=mycsv.document.str.lower()
y=mycsv.document_group
Y=[]
stemmed_documents = []
for i in range(0, 50000 ,2):
tokenized_document = tokenizer.tokenize(Document_text[i])
stemmed_document = ""
for w in tokenized_document:
if w not in stop_words:
w = re.sub(r'\d+', '', w)
if w is not None:
stemmed_document=stemmed_document+" "+stemmer.stem(w)
stemmed_documents=np.append(stemmed_documents,stemmed_document)
Y=np.append(Y,y[i])
Y_correct=[]
test_documents = []
for i in range(1,50000,4):
tokenized_document = tokenizer.tokenize(Document_text[i])
stemmed_document = ""
for w in tokenized_document:
if w not in stop_words:
w = re.sub(r'\d+', '', w)
if w is not None:
stemmed_document=stemmed_document+" "+stemmer.stem(w)
test_documents=np.append(test_documents,stemmed_document)
Y_correct=np.append(Y_correct,y[i])
Word_counts = count_vect.fit_transform(stemmed_documents)
Words_tfidf = tfidf_transformer.fit_transform(Word_counts)
Word_counts_test = count_vect.transform(test_documents)
Words_tfidf_test = tfidf_transformer.transform(Word_counts_test)
# Training
clf.fit(Words_tfidf, Y)
# Test
Ynew=clf.predict(Words_tfidf_test)