通过sklearn tfidf矩阵来训练MultinomialNB模型吗?

时间:2018-01-07 17:58:14

标签: scikit-learn logistic-regression text-classification naivebayes tfidfvectorizer

我正在做一些文本分类任务。我观察到的是,如果使用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吗?

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

非常感谢任何建议!

0 个答案:

没有答案