首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在多项式朴素贝叶斯算法中实现HashingVectorizer

如何在多项式朴素贝叶斯算法中实现HashingVectorizer
EN

Data Science用户
提问于 2019-09-16 14:40:06
回答 3查看 771关注 0票数 1

我使用了TfidfVectorizer,并通过MultinomialNB进行文档分类,它运行良好。

但是现在我需要传递一组非常大的文件,如果我想把这些文档内容传递给TfidfVectorizer,我的本地计算机就挂掉了。它似乎有一个性能问题。因此,我有一个使用HashingVectorizer的建议。

我使用了下面的分类代码(只是用TfidfVectorizer替换HashingVectorizer)

代码语言:javascript
复制
stop_words = open("english_stopwords").read().split("\n")
vect = HashingVectorizer(stop_words=stop_words, ngram_range=(1,5))
X_train_dtm = vect.fit_transform(training_content_list)
X_predict_dtm = vect.transform(predict_content_list)
nb = MultinomialNB()
nb.fit(X_train_dtm, training_label_list)
predicted_label_list = nb.predict(X_predict_dtm)

有错误:

文件"/home/rajesh/www/rajesh/docuchief2/project/web/env/lib/python3.6/site-packages/sklearn/naive_bayes.py",第720行,在_count ValueError中(“输入X必须是非负的”) ValueError:输入X必须是非负的

因此,我得到的TfidfVectorizer是根据单词的出现来计算的,所以它是工作的,但是HashingVectorizer逻辑是不同的,我不知道HashingVectorizer将如何在MultinomialNB中实现。

有人能帮我解决这个性能问题吗?如果是的话,我可以将TfidfVectorizer用于庞大的培训数据集,那么如何使用?如果没有,我如何在这里使用HashingVectorizer?

EN

回答 3

Data Science用户

发布于 2019-09-16 15:54:41

您需要确保散列向量不具有负面效果。这样做的方法是通过HashingVectorizer(non_negative=True)

票数 1
EN

Data Science用户

发布于 2020-01-25 01:43:24

在某些版本中,non_negative似乎不是一个论点。尝试使用decode_error = 'ignore'。如果您使用的是大型数据集,则哈希冲突也可能导致此错误,可以通过增加功能数量来解决此问题:

代码语言:javascript
复制
vect = HashingVectorizer(decode_error = 'ignore',
                        n_features = 2**21,
                        preprocessor = None)
票数 1
EN

Data Science用户

发布于 2021-04-28 16:19:05

新版本的滑雪板中,使用HashingVectorizer(alternate_sign=False)

票数 1
EN
页面原文内容由Data Science提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://datascience.stackexchange.com/questions/60281

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档