Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Scikit文本分类–;错误的输入形状错误_Python_Scikit Learn_Text Classification_Valueerror - Fatal编程技术网

Python Scikit文本分类–;错误的输入形状错误

Python Scikit文本分类–;错误的输入形状错误,python,scikit-learn,text-classification,valueerror,Python,Scikit Learn,Text Classification,Valueerror,我修改了本教程()以在路透社语料库上构建文本分类器。但是,我得到了一个错误的输入形状: 编辑:多亏@Vivek Kumar的帮助,我已经解决了输入形状错误的问题。但是,现在我得到了一个AttributeError:lower not found。经过一些研究,我认为这可能与路透社语料库的格式不正确有关。我有办法解决这个问题吗 这是我的代码: from sklearn.datasets import fetch_rcv1 #import reuters corpus from sklearn.fe

我修改了本教程()以在路透社语料库上构建文本分类器。但是,我得到了一个错误的输入形状:

编辑:多亏@Vivek Kumar的帮助,我已经解决了输入形状错误的问题。但是,现在我得到了一个AttributeError:lower not found。经过一些研究,我认为这可能与路透社语料库的格式不正确有关。我有办法解决这个问题吗

这是我的代码:

from sklearn.datasets import fetch_rcv1 #import reuters corpus
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline

rcv1 = fetch_rcv1()


reuters_train = fetch_rcv1(subset='train', shuffle=True, random_state=42)
reuters_train.target_names

count_vect = CountVectorizer()

train_counts = count_vect.fit_transform(reuters_train.data)
train_counts.shape
count_vect.vocabulary_.get(u'alogrithm')

tf_transformer = TfidfTransformer(use_idf=False).fit(train_counts)
train_tf = tf_transformer.transform(train_counts)
train_tf.shape
tfidf_transformer = TfidfTransformer()
train_tfidf = tfidf_transformer.fit_transform(train_counts)
train_tfidf.shape

clf = MultinomialNB().fit(train_tfidf, reuters_train.target)

text_clf = Pipeline([('vect', CountVectorizer()),
                     ('tfidf', TfidfTransformer()),
                     ('clf', MultinomialNB()),])

text_clf.fit(reuters_train.data, reuters_train.target)
Pipeline(...)

import numpy as np

reuters_testset = fetch_rcv1(subset='test', shuffle=True, random_state=42)

reuters_test = reuters_testset.data

predicted = text_clf.predict(reuters_test)

np.mean(predicted == reuters_test.target)
我是一个真正的编程和NLP初学者,所以我真的不太了解这些东西。
谢谢你的建议和帮助

这是因为您没有使用CountVectorizer中的实际数据。您使用的是
reuters\u train
,而您应该使用
reuters\u train.data

更改:

train_counts = count_vect.fit_transform(reuters_train)
致:

还包括CountVectorizer+TfidfTransformer=。所以我建议用它来代替两个对象

在进一步阅读说明时,假定
.data
包含:

非零值包含余弦归一化对数TF-IDF向量

因此,实际上不需要对数据执行CountVectorizer和TfidfTransformer,您可以像这样直接使用它:

clf = MultinomialNB().fit(reuters_train.data, reuters_train.target)
但您将再次遇到错误,这一次是由于目标数据的形状。您可以看到,仅适用于一维目标(可能是多类或二进制),但不适用于多标签或多输出数据


TLDR因此您需要从代码中删除CountVectorizer和TfidfTransformer,因为它已经在数据中完成了,您需要将分类器多项式nb更改为任何其他支持目标
y
中的二维的分类器,比如DecisionTreeClassifier或其他

谢谢,这很有帮助!但是,现在我得到了一个AttributeError:找不到更低的?知道我能做些什么吗?@LittleEnttainer在同一代码上?或者你改变了它。请编辑问题并添加详细信息。还要添加错误的完整堆栈跟踪。@LittleEnttainer嘿,我已经编辑了我的答案,以适应您遇到的第二个错误。
clf = MultinomialNB().fit(reuters_train.data, reuters_train.target)