Hashingvectorizer 和多项式朴素贝叶斯不能一起工作

Posted

技术标签:

【中文标题】Hashingvectorizer 和多项式朴素贝叶斯不能一起工作【英文标题】:Hashingvectorizer and Multinomial naive bayes are not working together 【发布时间】:2016-07-27 04:10:50 【问题描述】:

我正在尝试在 python 2.7 中使用Scikit-learn 编写一个 Twitter 情绪分析程序。操作系统是 Linux Ubuntu 14.04。

在向量化步骤中,我想使用Hashingvectorizer()。为了测试分类器的准确性,它可以与 LinearSVCNuSVCGaussianNBBernoulliNBLogisticRegression 分类器一起正常工作,但对于 MultinomialNB,它会返回此错误

Traceback (most recent call last):
  File "/media/test.py", line 310, in <module>
    classifier_rbf.fit(train_vectors, y_trainTweets)
  File "/home/.local/lib/python2.7/site-packages/sklearn/naive_bayes.py", line 552, in fit
    self._count(X, Y)
  File "/home/.local/lib/python2.7/site-packages/sklearn/naive_bayes.py", line 655, in _count
    raise ValueError("Input X must be non-negative")
ValueError: Input X must be non-negative
[Finished in 16.4s with exit code 1] 

这是与此错误相关的块代码

vectorizer = HashingVectorizer()
train_vectors = vectorizer.fit_transform(x_trainTweets)
test_vectors = vectorizer.transform(x_testTweets)

classifier_rbf = MultinomialNB()
classifier_rbf.fit(train_vectors, y_trainTweets)
prediction_rbf = classifier_rbf.predict(test_vectors)

为什么会这样,我该如何解决?

【问题讨论】:

【参考方案1】:

初始化矢量化器时,您需要将non_negative 参数设置为True

vectorizer = HashingVectorizer(non_negative=True)

【讨论】:

在 sklearn 0.19+ 中应该是 `HashingVectorizer(alternate_sign=False)'【参考方案2】:

如果 non_negative 参数不可用(就像我的版本一样)

尝试放置: vectorizer = HashingVectorizer(alternate_sign=False)

【讨论】:

以上是关于Hashingvectorizer 和多项式朴素贝叶斯不能一起工作的主要内容,如果未能解决你的问题,请参考以下文章

R - 为 multinomial_naive_bayes() 函数生成的模型生成混淆矩阵和 ROC

三种常用的朴素贝叶斯实现算法——高斯朴素贝叶斯伯努利朴素贝叶斯多项式朴素贝叶斯

分类-朴素贝叶斯(高斯多项式伯努利)

朴素贝叶斯:朴素贝叶斯定义朴素贝叶斯公式分解朴素贝叶斯分类流程高斯型朴素贝叶斯多项式朴素贝叶斯伯努利型朴素贝叶斯朴素贝叶斯预测概率校准朴素贝叶斯优缺点

如何为 scikit 和 NLTK 使用不同的数据集?

使用 10 折交叉验证获取分类报告,说明多项式朴素贝叶斯的分类精度和召回率