【问题标题】:How can i train GaussianNB in pipeline by removing error[AttributeError: 'numpy.ndarray' object has no attribute 'lower']我如何通过删除错误在管道中训练 GaussianNB [AttributeError: 'numpy.ndarray' 对象没有属性 'lower']
【发布时间】:2018-09-26 01:13:13
【问题描述】:

这是我使用计数矢量化器和 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)

它给了我错误: AttributeError:“numpy.ndarray”对象没有属性“lower”

【问题讨论】:

    标签: python numpy scikit-learn


    【解决方案1】:

    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

    【讨论】:

    • @SikandarAli,如果有帮助,请采纳答案。
    • 先生,如果我使用管道,那么它会给我错误[AttributeError: 'numpy.ndarray' object has no attribute 'lower'] 请帮帮我。
    • @SikandarAli 请编辑问题以添加管道的代码/
    • 先生,请告诉我语法。
    • 先生,我已经应用了该语法。它需要密集的数据才能通过。那么我应该使用密集变压器和其他变压器一起工作吗?
    【解决方案2】:

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

    PS 使用密集矩阵来处理更大的语料库,您最终可能会得到 MemoryError

    所以试试这个:

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

    【讨论】:

    • 谢谢你,先生。我已经尝试过该分类器,但我想尝试 GaussianNB
    猜你喜欢
    • 2019-12-07
    • 2020-10-06
    • 1970-01-01
    • 2019-06-29
    • 2020-09-22
    • 2020-10-22
    • 1970-01-01
    • 2014-12-09
    • 1970-01-01
    相关资源
    最近更新 更多