Hashingvectorizer 和多项式朴素贝叶斯无法协同工作

ehs*_*han 5 python text-mining python-2.7 scikit-learn

我正在尝试用Scikit-learnpython 2.7编写一个 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] 
Run Code Online (Sandbox Code Playgroud)

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

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)
Run Code Online (Sandbox Code Playgroud)

为什么会发生这种情况,我该如何解决?

小智 7

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

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


sil*_*ser 5

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

vectorizer = HashingVectorizer(non_negative=True)
Run Code Online (Sandbox Code Playgroud)

  • 在 sklearn 0.19+ 中它应该是`HashingVectorizer(alternate_sign=False)' (8认同)