1

我正在做一些文本分类任务。我观察到的是,如果输入 tfidf 矩阵(来自 sklearn 的TfidfVectorizer),Logistic 回归模型总是优于 MultinomialNB 模型。下面是我训练两者的代码:

X = df_new['text_content']
y = df_new['label']
X_train, X_test, y_train, y_test = train_test_split(X, y)
vectorizer = TfidfVectorizer(stop_words='english')
X_train_dtm = vectorizer.fit_transform(X_train)
X_test_dtm = vectorizer.transform(X_test)

clf_lr = LogisticRegression()
clf_lr.fit(X_train_dtm, y_train)
y_pred = clf_lr.predict(X_test_dtm)
lr_score = accuracy_score(y_test, y_pred) # perfectly balanced binary classes

clf_mnb = MultinomialNB()
clf_mnb.fit(X_train_dtm, y_train)
y_pred = clf_mnb.predict(X_test_dtm)
mnb_score = accuracy_score(y_test, y_pred) # perfectly balanced binary classes

目前 lr_score > mnb_score 总是。我想知道 MultinomialNB 究竟是如何使用 tfidf 矩阵的,因为 tfidf 中的术语频率是根据没有类信息计算的。我不应该像对 LogisticRegression 一样将 tfidf 矩阵提供给 MultinomialNB 吗?

TfidfVectorizer更新:我了解和的结果之间的区别CountVectorizer。而且我还刚刚检查了sklearn 的 MultinomialNB.fit() 函数的源代码,看起来它确实希望计数与频率相反。这也将解释我在下面的评论中提到的性能提升。但是,我仍然想知道在任何情况下将 tfidf 传递到 MultinomialNB 是否有意义。sklearn 文档简要提到了这种可能性,但没有太多细节。

任何建议将不胜感激!

4

0 回答 0