sklearn多项式nb中的负值处理

2024-06-01 08:28:57 发布

您现在位置:Python中文网/ 问答频道 /正文

在sklearn中运行多项式nb之前,我正在规范化文本输入,如下所示:

vectorizer = TfidfVectorizer(max_df=0.5, stop_words='english', use_idf=True)
lsa = TruncatedSVD(n_components=100)
mnb = MultinomialNB(alpha=0.01)

train_text = vectorizer.fit_transform(raw_text_train)
train_text = lsa.fit_transform(train_text)
train_text = Normalizer(copy=False).fit_transform(train_text)

mnb.fit(train_text, train_labels)

不幸的是,多项式nb不接受LSA阶段创建的非负值。有什么解决办法吗?


Tags: text文本dftransformtrainsklearn规范化max
1条回答
网友
1楼 · 发布于 2024-06-01 08:28:57

我建议您不要将朴素Bayes与SVD或其他矩阵分解结合使用,因为基于应用Bayes定理的朴素Bayes在特征之间具有强(朴素)独立性假设。使用其他分类器,例如RandomForest

我试过这个实验,结果是:

vectorizer = TfidfVectorizer(max_df=0.5, stop_words='english', use_idf=True)
lsa = NMF(n_components=100)
mnb = MultinomialNB(alpha=0.01)

train_text = vectorizer.fit_transform(raw_text_train)
train_text = lsa.fit_transform(train_text)
train_text = Normalizer(copy=False).fit_transform(train_text)

mnb.fit(train_text, train_labels)

这是相同的情况,但我使用NMP(非负矩阵分解)代替SVD,得到0,04%的准确率。

改变RandomForest的分类器多项式nb,我得到了79%的准确率。

因此更改分类器或不应用矩阵分解。

相关问题 更多 >