15

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

4

4 回答 4

6

我建议您不要将朴素贝叶斯与 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% 的准确率。

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

于 2016-01-20T18:32:45.973 回答
0

我在 NB 上运行了相同的问题,并且确实使用sklearn.preprocessing.MinMaxScaler()了 gobrewers14 的建议。但它实际上将相同标准化数据集的决策树、随机森林和 KNN 的性能准确性降低了 0.2%。

于 2021-10-11T08:58:29.807 回答
0

尝试创建一个管道,第一步是标准化,第二步是模型拟合。

from sklearn.preprocessing import MinMaxScaler
p = Pipeline([('Normalizing',MinMaxScaler()),('MultinomialNB',MultinomialNB())])
p.fit(X_train,y_train) 
于 2022-01-01T14:41:52.440 回答
0

尝试在fit()

train_text.np.todense() 
于 2021-03-10T16:36:31.180 回答