我正在将我的文本输入规范化,然后在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阶段创建的非负值。有什么想法绕过这个吗?
答案 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()