处理sklearn MultinomialNB中的负值

时间:2014-06-11 17:40:29

标签: python scikit-learn multinomial

我正在将我的文本输入规范化,然后在sklearn中运行MultinomialNB:

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)

不幸的是,MultinomialNB不接受在LSA阶段创建的非负值。有什么想法绕过这个吗?

2 个答案:

答案 0 :(得分:4)

我建议你不要使用具有SVD或其他矩阵因子分解的朴素贝叶斯,因为朴素贝叶斯基于应用贝叶斯定理在特征之间具有强烈(天真)的独立假设。使用其他分类器,例如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更改分类器MultinomialNB我有79%的准确度。

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

答案 1 :(得分:0)

尝试在fit()

train_text.np.todense()