如何通过删除错误在管道中训练高斯NB[属性错误:'numpy.ndarray'对象没有属性"较低"]



这是我使用计数矢量器和tfidftransformer的数据,也使用GaussianNB,但我在这个代码中得到错误。请让我知道正确的语法。

train = [('I love this sandwich.','pos'),
     ('This is an amazing place!', 'pos'),
     ('I feel very good about these beers.', 'pos'),
     ('This is my best work.', 'pos'),
     ('What an awesome view', 'pos'),
     ('I do not like this restaurant', 'neg'),
     ('I am tired of this stuff.', 'neg'),
     ("I can't deal with this.", 'neg'),
     ('He is my sworn enemy!.', 'neg'),
     ('My boss is horrible.', 'neg')
    ]
from sklearn.feature_extraction.text import CountVectorizer
cv = CountVectorizer()
text_train_cv = cv.fit_transform(list(zip(*train))[0])
print(text_train_cv.toarray())
from sklearn.feature_extraction.text import TfidfTransformer
tfidf_trans = TfidfTransformer()
text_train_tfidf = tfidf_trans.fit_transform(text_train_cv)
print(text_train_tfidf.toarray())
from sklearn.naive_bayes import GaussianNB
clf = GaussianNB().fit(text_train_tfidf.toarray(), list(zip(*train))[1])
text_clf = Pipeline([('vect',CountVectorizer(stop_words='english')), 
('tfidf',TfidfTransformer()),('clf',GaussianNB(priors=None))])
text_clf = text_clf.fit(text_train_tfidf.toarray() , list(zip(*train))[1])
print(text_clf)

它给了我错误:属性错误:"numpy.ndarray"对象没有属性"lower">

do

clf = GaussianNB().fit(text_train_tfidf.toarray() , list(zip(*train))[1])

GaussianNB不支持稀疏矩阵作为X的输入,但TfidfTransformer默认返回稀疏矩阵。因此错误。

toarray()会将其转换为密集。但请注意,这将导致内存使用量大幅增加。

更新:

使用管道时,需要提供传递给管道中转换器的数据。在这种情况下,这是 list(zip(*train))[0] .

text_clf = text_clf.fit(list(zip(*train))[0] , list(zip(*train))[1])

这将解决您的第一个错误。但是由于稀疏矩阵,您仍然会收到错误。请参阅此答案以解决此问题:- https://stackoverflow.com/a/28384887/3374996<</p>

div class="one_answers">

多项式NB经常用于文本分类任务,它确实支持稀疏矩阵作为输入数据集。

PS 使用密集矩阵进行较大的语料库,您最终可能会得到MemoryError

所以试试这个:

from sklearn.naive_bayes import MultinomialNB
clf = MultinomialNB().fit(text_train_tfidf , list(zip(*train))[1])

最新更新