Python sklearn多项式nb中负值的处理

Python sklearn多项式nb中负值的处理,python,scikit-learn,multinomial,Python,Scikit Learn,Multinomial,在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 =

在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阶段创建的非负值。有什么办法可以解决这个问题吗

我建议您不要将朴素贝叶斯与奇异值分解或其他矩阵分解结合使用,因为朴素贝叶斯基于应用贝叶斯定理,并在特征之间具有强(朴素)独立性假设。使用其他分类器,例如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%的准确率


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

尝试在
fit()中执行此操作。


尝试使用
sklearn.preprocessing.MinMaxScaler()
。将您的培训功能扩展到
[0,1]
Brilliant。成功了!谢谢。或者尝试用(NMF)代替LSA,或者用SVM代替朴素贝叶斯。别忘了从sklearn.decomposition导入带有
的[NFM][1]:
train_text.np.todense()