我在SkEngin中运行MuldoMialNB之前对文本输入进行了规范化:

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阶段创建的非负值。有什么解决办法吗?

最佳答案

我建议您不要将朴素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%的准确率。
因此,请更改分类器或不应用矩阵分解。

关于python - 在sklearn MultinomialNB中处理负值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24169238/

10-12 18:25